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

13
我想使用hg本身的Mercurial存储库。也就是说,我从https://www.mercurial-scm.org/repo/hg克隆了Mercurial并希望在克隆的存储库中运行一些hg命令。问题在于,在此克隆中运行hg时,hg可执行文件会尝试从此目录而非/usr/lib/pythonVERSION等目录加载其Python模块。据我所知,这是因为Python导入路径sys.path包含一个空字符串作为第一个条目,这可能意味着“当前目录”。未设置PYTHONPATH环境变量。
我的问题是如何防止我安装的hg导入“错误”的模块。

sys.path.insert(0,"/usr/lib/pythonVERSION")? - Padraic Cunningham
我应该把它放在哪里?我不想修改系统的 hg 脚本。 - ragol
2个回答

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导出到您的shell中,但这将影响您的整个体验。


奇怪啊,这对我并不起作用。它似乎仍然更喜欢本地版本的包 :/ - Rafael Almeida

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


1
我尝试运行的脚本是/usr/bin/hg,它本身就是mercurial。也许我没有正确理解你的意思,但似乎你建议修改它。当然,这是最简单的解决方案,但这意味着我将修改由包管理器安装的文件。我不喜欢这个想法。我宁愿编写一个外部脚本,以这样的方式调用/usr/bin/hg,使其不从当前目录加载模块。 - ragol
你正在运行的脚本叫什么名字?它有.py扩展名吗?我假设你已经创建或编辑了一些Python脚本,并尝试导入一个名为mercurial的模块。我的建议是在你尝试导入mercurial模块的那一行之前包含sys.path.insert命令。 - rolb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接