2014-08-27 85 views
6

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

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

+0

'sys.path.insert(0,“/ usr/lib/pythonVERSION”)'? – 2014-08-27 20:10:30

+0

我应该把它放在哪里?我不想修改系统'hg'脚本。 – ragol 2014-08-27 23:12:29

回答

0

@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 2014-08-28 16:50:43

+0

你正在运行的脚本的名称是什么?它是否有.py扩展名?即时通讯假设你已经创建或编辑了一些python脚本,并试图导入一个名为mercurial的模块。我建议的是在你尝试导入mercurial模块的行之前包含sys.path.insert命令。 – rolb 2014-08-28 17:06:51

+1

@rolb他必须告诉你多少次?他正在运行'/ usr/bin/hg',作为一个可执行文件。它可能是一个实际的可执行文件,它可能是一个带有shebang的脚本。它没有任何扩展名,它们在UNIX中不是必需的。 – 2017-12-05 02:27:52

1

我会处理的议题的方式是通过创建一个具有下列内容的/usr/local/bin/hg sh脚本:

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

(基于Ubuntu的distributives使用dist-packages代替site-packages

PYTHONPATH是Python解释器的尊重,以获得额外的模块导入路径的特殊的环境变量。

或者,您可以将PYTHONPATH导出到您的shell中,但它会影响您的整体体验。