如何从Python导入路径中移除当前目录
我想要使用自己的 hg
的 Mercurial 仓库。也就是说,我从 https://www.mercurial-scm.org/repo/hg 克隆了 Mercurial,并想在这个克隆的仓库里运行一些 hg
命令。问题是,当我在这个克隆的仓库里运行 hg
时,hg
执行文件试图从这个目录加载它的 Python 模块,而不是从 /usr/lib/pythonVERSION
等其他地方加载。根据我的理解,这种情况发生是因为 Python 的导入路径 sys.path
的第一个条目是一个空字符串,这可能意味着“当前目录”。而 PYTHONPATH
环境变量并没有设置。
我的问题是,如何防止我安装的 hg
导入“错误”的模块。
2 个回答
@ragol,我觉得Padraic的解决方案是对的。在你尝试运行hg命令的python脚本中,你需要加上以下命令:sys.path.insert(0,"/usr/lib/pythonVERSION")
把这个命令放在你的python脚本的最开头。这个命令的意思是告诉python在导入模块时,先去/usr/lib/pythonVERSION
这个文件夹里找。
如果这样还不行,你可能需要更具体一点,告诉它确切的路径。比如,如果你要导入的模块在/usr/lib/pythonVERSION/site-packages/hg
这个文件夹里,你可以用这个命令:sys.path.insert(0,"/usr/lib/pythonVERSION/site-packages/hg")
我处理这个问题的方法是创建一个名为 /usr/local/bin/hg
的 sh 脚本,里面包含以下内容:
#!/bin/sh
PYTHONPATH=/usr/lib/pythonVERSION/site-packages /usr/bin/hg
(基于 Ubuntu 的系统使用 dist-packages
而不是 site-packages
)
PYTHONPATH
是一个特殊的环境变量,Python 解释器会用它来获取额外的模块导入路径。
另外,你也可以把 PYTHONPATH
导出到你的命令行中,但这样会影响你整个使用体验。