将目录添加到 sys.path /PYTHONPATH
Posted
技术标签:
【中文标题】将目录添加到 sys.path /PYTHONPATH【英文标题】:adding directory to sys.path /PYTHONPATH 【发布时间】:2013-04-13 10:10:02 【问题描述】:我正在尝试从特定目录导入模块。
问题是如果我使用sys.path.append(mod_directory)
附加路径然后打开python 解释器,目录mod_directory
会添加到列表sys.path 的末尾。如果我在打开 python 解释器之前导出 PYTHONPATH
变量,该目录将被添加到列表的开头。在后一种情况下,我可以导入模块,但在前一种情况下,我不能。
有人可以解释为什么会发生这种情况并给我一个解决方案,将mod_directory
添加到开头,在 python 脚本中?
【问题讨论】:
我试过site
module。
【参考方案1】:
这是按记录工作的。 PYTHONPATH
中指定的任何路径都记录为通常在工作目录之后但在标准解释器提供的路径之前。 sys.path.append()
附加到现有路径。请参阅 here 和 here。如果你想要一个特定的目录首先出现,只需将它插入到 sys.path 的头部即可:
import sys
sys.path.insert(0,'/path/to/mod_directory')
也就是说,管理导入的方法通常比使用PYTHONPATH
或直接操作sys.path
更好。例如,请参阅this question 的答案。
【讨论】:
感谢您的回复。问题是我没有意识到要添加打包为 .egg 文件的模块,您必须包含文件名而不仅仅是 python 2.6 中的目录 嘿伙计,这打破了我的 django。你确定你的意思是告诉人们把它放在顶部?!?!!? @RClaven,对不起,很难说你指的是什么动作和结果:“把它放在顶部”和“打破我的 django”不是很精确。你能详细说明一下吗? 只是一个旁注:sys.path
是零索引的任何列表,所以它应该是 sys.path.insert(0, '/path/to/mod_directory')
你真的应该使用“1”而不是“0”!否则你会破坏sys.path。另见***.com/q/10095037/125507。【参考方案2】:
你可以使用:
import os
path = 'the path you want'
os.environ['PATH'] += ':'+path
【讨论】:
你需要';'在窗口中。【参考方案3】:对我来说,我需要 caffe 到我的 python 路径。我可以将它的路径添加到文件中
/home/xy/.bashrc
添加
export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH
.
到我的/home/xy/.bashrc
文件。
但是我用pycharm的时候,路径还是不在里面。
所以我可以通过运行 -> 编辑配置来添加 PYTHONPATH
变量的路径。
【讨论】:
最简单的就是最好的答案,添加这个用于开发将使自动完成工作 我已经按照上面的解释更新了 .bashrc,但没有反映在 jupyter notebook 中。 Jupyter notebook 仍然显示找不到模块。【参考方案4】:临时更改目录适用于导入:
cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)
【讨论】:
这似乎不起作用;在 Python 3.8.11 上使用No module named '<module>'
失败。【参考方案5】:
在 Windows 下从 Powershell 运行 Python 脚本时,应该可以:
$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"
# Now run the actual script
python your_script.py
【讨论】:
以上是关于将目录添加到 sys.path /PYTHONPATH的主要内容,如果未能解决你的问题,请参考以下文章