关于python:将目录添加到sys.path / PYTHONPATH

adding directory to sys.path /PYTHONPATH

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

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

有人可以解释为什么会这样,并给我一个解决方案,在python脚本中添加mod_directory到开头?


这是有记录的。 PYTHONPATH中指定的任何路径都记录为通常位于工作目录之后但在标准解释程序提供的路径之前。 sys.path.append()附加到现有路径。看到这里和这里。如果您希望首先使用特定目录,只需将其插入sys.path的头部:

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

也就是说,管理导入的方法通常比使用PYTHONPATH或直接操作sys.path更好。例如,请参阅此问题的答案。


至于我,我需要caffe到我的python路径。我可以添加它的文件路径
/home/xy/.bashrc添加

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

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

但是当我使用pycharm时,路径仍未进入。

所以我可以通过运行 - >编辑配置添加PYTHONPATH变量的路径。

enter image description here


你可以使用:

1
2
3
import os
path = 'the path you want'
os.environ['PATH'] += ':'+path

暂时改变目录适用于导入:

1
2
3
4
cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)

在Windows下从Powershell运行Python脚本时,这应该有效:

1
2
3
4
5
$pathToSourceRoot ="C:/Users/Steve/YourCode"
$env:PYTHONPATH ="$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"

# Now run the actual script
python your_script.py