将目录添加到sys.path / PYTHONPATH


130

我正在尝试从特定目录导入模块。

问题是,如果我使用sys.path.append(mod_directory)追加路径然后打开python解释器,该目录mod_directory将添加到列表sys.path的末尾。如果我PYTHONPATH在打开python解释器之前导出变量,则目录将添加到列表的开头。在后一种情况下,我可以导入模块,但是在前一种情况下,我不能。

有人可以解释为什么会发生这种情况,并给我一个 python脚本中将其添加mod_directory到开始的解决方案吗?


Answers:


178

如文档所述,这正在工作。PYTHONPATH文件中指定的所有路径通常在工作目录之后但在标准解释器提供的路径之前记录。 sys.path.append()追加到现有路径。看到这里这里。如果要让特定目录优先出现,只需将其插入sys.path的开头即可:

import sys
sys.path.insert(0,'/path/to/mod_directory')

就是说,通常有比直接使用PYTHONPATH或操纵更好的方法来管理进口sys.path。例如,请参阅此问题的答案。


谢谢回复。问题是我没有意识到要添加打包为.egg文件的模块,您必须包含文件名而不是仅包含python 2.6中的目录
UnadulteratedImagination 2013年

2
嘿,这打破了我的django。您确定要告诉别人把它放在顶部吗?!?!?
R Claven 2014年

16
@RClaven,对不起,很难说出您所指的是什么动作和结果:“放在最前面”和“打破我的django”不是很精确。你能详细说明吗?
内德·迪利

有关sys.path如何工作的更多信息,请参见以下答案stackoverflow.com/a/38403654/850326
djhaskin987 '16

2
您确实应该使用“ 1”而不是“ 0”!否则,您将破坏sys.path。另请参阅stackoverflow.com/q/10095037/125507
kadee


6

对于我来说,我需要了解我的python路径。我可以将它的路径添加到该文件 /home/xy/.bashrc由add

export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH

到我的/home/xy/.bashrc文件。

但是当我使用pycharm时,路径仍然不在。

因此,我可以PYTHONPATH通过运行->编辑配置将路径添加到变量。

在此处输入图片说明


最简单的方法是最好的答案,将其添加到开发中将使自动完成工作有效
Gang

我已经按照上述说明更新了.bashrc,但没有在jupyter笔记本中反映出来。Jupyter笔记本仍然显示找不到模块。
Athar

3

临时更改目录可以很好地导入:

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)

0

在Windows下从Powershell运行Python脚本时,这应该可以工作:

$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"

# Now run the actual script
python your_script.py
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.