我正在尝试从特定目录导入模块。
问题是如果我使用sys.path.append(mod_directory)
附加路径然后打开python解释器,目录mod_directory
将被添加到列表sys.path的末尾。如果在打开python解释器之前导出PYTHONPATH
变量,则该目录将添加到列表的开头。在后一种情况下,我可以导入模块,但在前者,我不能。
有人可以解释为什么会发生这种情况并给我一个解决方案,在python脚本中添加mod_directory
到一开始吗?
这是有记录的。 PYTHONPATH
中指定的任何路径都记录为通常位于工作目录之后但在标准解释器提供的路径之前。 sys.path.append()
追溯到现有的道路。见here和here。如果您希望首先使用特定目录,只需将其插入sys.path的头部:
import sys
sys.path.insert(0,'/path/to/mod_directory')
也就是说,管理进口通常比使用PYTHONPATH
或直接操纵sys.path
更好。例如,请参阅this question的答案。
你可以使用:
import os
path = 'the path you want'
os.environ['PATH'] += ':'+path
暂时改变目录适用于导入:
cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)
在Windows下从Powershell运行Python脚本时,这应该有效:
$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"
# Now run the actual script
python your_script.py