adding directory to sys.path /PYTHONPATH
我正在尝试从特定目录导入模块。
问题是如果我使用sys.path.append(mod_directory)附加路径然后打开python解释器,目录mod_directory将被添加到列表sys.path的末尾。 如果在打开python解释器之前导出PYTHONPATH变量,则该目录将添加到列表的开头。 在后一种情况下,我可以导入模块,但在前者,我不能。
有人可以解释为什么会这样,并给我一个解决方案,在python脚本中添加mod_directory到开头?
这是有记录的。 PYTHONPATH中指定的任何路径都记录为通常位于工作目录之后但在标准解释程序提供的路径之前。 sys.path.append()附加到现有路径。看到这里和这里。如果您希望首先使用特定目录,只需将其插入sys.path的头部:
1 2
| import sys
sys.path.insert(0,'/path/to/mod_directory') |
也就是说,管理导入的方法通常比使用PYTHONPATH或直接操作sys.path更好。例如,请参阅此问题的答案。
-
谢谢回复。问题是我没有意识到要添加打包为.egg文件的模块,你必须包含文件名,而不仅仅是python 2.6中的目录
-
嘿,这个打破了我的django。你确定要告诉别人把它放在最顶层吗?!?!!?
-
@RClaven,对不起,很难说你指的是什么动作和结果:"把它放在顶部"和"打破我的django"不是很精确。你能详细说说吗?
-
有关sys.path如何工作的更多信息,请参阅此答案stackoverflow.com/a/38403654/850326
-
只是旁注:sys.path作为任何列表被零索引,因此它应该是sys.path.insert(0, '/path/to/mod_directory')
-
@ V.K.Thanks注意到毕竟这一次!固定。
-
你真的应该使用"1"而不是"0"!否则你会破坏sys.path。另请参见stackoverflow.com/q/10095037/125507。
至于我,我需要caffe到我的python路径。我可以添加它的文件路径
/home/xy/.bashrc添加
export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH。
到我的/home/xy/.bashrc文件。
但是当我使用pycharm时,路径仍未进入。
所以我可以通过运行 - >编辑配置添加PYTHONPATH变量的路径。
-
最简单的是最好的答案,添加此开发将使自动完成工作
-
我已经更新了.bashrc,如上所述,但没有反映在jupyter笔记本中。 Jupyter笔记本仍然说未找到模块。
你可以使用:
1 2 3
| import os
path = 'the path you want'
os.environ['PATH'] += ':'+path |
暂时改变目录适用于导入:
1 2 3 4
| cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd) |
在Windows下从Powershell运行Python脚本时,这应该有效:
1 2 3 4 5
| $pathToSourceRoot ="C:/Users/Steve/YourCode"
$env:PYTHONPATH ="$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"
# Now run the actual script
python your_script.py |