将目录添加到sys.path / PYTHONPATH

时间:2013-04-19 22:27:28

标签: python mechanize python-import pythonpath

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

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

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

5 个答案:

答案 0 :(得分:132)

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

的头部即可
import sys
sys.path.insert(0,'/path/to/mod_directory')

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

答案 1 :(得分:4)

对于我来说,我需要了解我的python路径。我可以将其路径添加到文件中  /home/xy/.bashrc通过添加

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

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

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

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

enter image description here

答案 2 :(得分:3)

您可以使用:

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

答案 3 :(得分:1)

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

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

答案 4 :(得分: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