158

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

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

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

4

5 回答 5

232

这是按记录工作的。中指定的任何路径PYTHONPATH都记录为通常在工作目录之后但在标准解释器提供的路径之前。 sys.path.append()附加到现有路径。见这里这里。如果你想要一个特定的目录首先出现,只需将它插入到 sys.path 的头部:

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

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

于 2013-04-19T22:49:25.087 回答
14

你可以使用:

import os
path = 'the path you want'
os.environ['PATH'] += ':'+path
于 2017-08-05T12:47:10.267 回答
9

对我来说,我需要对我的 python 路径进行 caffe。我可以通过添加将它的路径添加到文件 /home/xy/.bashrc

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

到我的/home/xy/.bashrc档案。

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

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

在此处输入图像描述

于 2018-07-16T08:47:43.907 回答
2

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

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

# Now run the actual script
python your_script.py
于 2018-02-23T16:19:53.253 回答
2

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

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)
于 2018-02-16T16:19:01.477 回答