我正在尝试从特定目录导入模块。
问题是如果我使用sys.path.append(mod_directory)
追加路径然后打开python解释器,则目录mod_directory
会被添加到列表sys.path的末尾。如果我在打开python解释器之前导出PYTHONPATH
变量,则该目录将添加到列表的开头。在后一种情况下,我可以导入模块,但在前者中,我不能。
有人可以解释为什么会这样,并给我一个解决方案,将mod_directory
添加到开头,里面一个python脚本?
答案 0 :(得分:132)
这是有记录的。 PYTHONPATH
中指定的任何路径都记录为通常位于工作目录之后但在标准解释程序提供的路径之前。 sys.path.append()
附加到现有路径。请参阅here和here。如果您希望首先使用特定目录,只需将其插入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
变量中。
答案 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