将目录添加到sys.path / PYTHONPATH

问题描述 投票:96回答:5

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

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

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

python mechanize python-import pythonpath
5个回答
136
投票

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

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

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


4
投票

你可以使用:

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

4
投票

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

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

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

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

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

enter image description here


2
投票

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

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

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
© www.soinside.com 2019 - 2024. All rights reserved.