如何从Python导入路径中移除当前目录

13 投票
2 回答
3835 浏览
提问于 2025-04-18 18:44

我想要使用自己的 hg 的 Mercurial 仓库。也就是说,我从 https://www.mercurial-scm.org/repo/hg 克隆了 Mercurial,并想在这个克隆的仓库里运行一些 hg 命令。问题是,当我在这个克隆的仓库里运行 hg 时,hg 执行文件试图从这个目录加载它的 Python 模块,而不是从 /usr/lib/pythonVERSION 等其他地方加载。根据我的理解,这种情况发生是因为 Python 的导入路径 sys.path 的第一个条目是一个空字符串,这可能意味着“当前目录”。而 PYTHONPATH 环境变量并没有设置。

我的问题是,如何防止我安装的 hg 导入“错误”的模块。

2 个回答

-1

@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")

2

我处理这个问题的方法是创建一个名为 /usr/local/bin/hg 的 sh 脚本,里面包含以下内容:

#!/bin/sh
PYTHONPATH=/usr/lib/pythonVERSION/site-packages /usr/bin/hg

(基于 Ubuntu 的系统使用 dist-packages 而不是 site-packages

PYTHONPATH 是一个特殊的环境变量,Python 解释器会用它来获取额外的模块导入路径。

另外,你也可以把 PYTHONPATH 导出到你的命令行中,但这样会影响你整个使用体验。

撰写回答