每当我使用sys.path.append时,都会添加新目录。 但是,一旦我关闭python,列表将恢复到之前的(默认?)值。 如何将目录永久添加到PYTHONPATH?
如果您正在使用bash(在Mac或GNU / Linux发行版上),请将其添加到~/.bashrc
1
| export PYTHONPATH="${PYTHONPATH}:/my/other/path" |
-
这对我来说非常合适,但请确保您指向的目录位于目录结构中最顶层的init.py文件中。起初这对我来说并不是很清楚。例如,我尝试导出PYTHONPATH = $ PYTHONPATH:/ Users / joey / repos但它不起作用,因为我的repos目录没有_init_.py。再往下走一个目录:/ Users / joey / repos / specificRepo就可以了。现在python可以遍历任何连接到包含init.py的specificRepo目录的向下目录!
-
这对我有用,但你能解释这个PYTHONPATH变量的位置吗?以及"导出PYTHONPATH"如何知道找到确切的文件?
-
编辑~/.bashrc后再记得运行source ~/.bashrc请参阅stackoverflow.com/questions/2518127/
-
我认为将sudo su放在.bashrc文件的开头是个坏主意。这篇文章与我同意。在我的系统上,至少,它甚至没有必要。
-
它对我不起作用:(使用Ubuntu 14.04
-
这就是答案。
-
为什么这让我觉得python部署到生产可能是一个痛苦的屁股。
您需要将新目录添加到环境变量PYTHONPATH中,并用前一个内容的冒号分隔。在任何形式的Unix中,你都可以在一个适合你正在使用的任何shell的启动脚本(.profile或其他什么,取决于你最喜欢的shell)中使用一个命令来执行该操作,该命令同样取决于所讨论的shell;在Windows中,您可以通过系统GUI执行此操作。
superuser.com可能是一个更好的地方进一步询问,例如,如果您需要有关如何在您选择的平台和shell中丰富环境变量的详细信息,请提供更多详细信息,因为它本身并不是一个编程问题。
-
勘误:窗户上的分隔符是分号。如果需要覆盖Windows上的系统路径,则通过GUI设置用户环境变量可能不够,因为用户变量会附加到系统变量中。在这些情况下,您需要使用启动脚本进行必要的调整。
-
@Nathan,tx用于分号提醒,但是(如果你当然是管理员)你可以在windows上设置系统env.vars(另外,OP不询问如何覆盖路径,只是如何附加到它所以,用户env.var也可以这样做! - )。
-
不幸的是,我不是我工作PC上的管理员,所以我不得不采取这样的措施。 :(
您也可以创建路径配置文件,而不是操作PYTHONPATH。首先找出Python搜索此信息的目录:
1
| python -m site --user-site |
出于某种原因,这似乎在Python 2.7中不起作用。在那里你可以使用:
1
| python -c 'import site; site._script()' --user-site |
然后在该目录中创建一个.pth文件,其中包含您要添加的路径(如果该目录不存在,则创建该目录)。
例如:
1 2 3 4 5 6 7 8
| # find directory
SITEDIR=$(python -m site --user-site)
# create if it doesn't exist
mkdir -p"$SITEDIR"
# create new .pth file with our path
echo"$HOME/foo/bar">"$SITEDIR/somelib.pth" |
-
我已经尝试使用Python 2.6,它似乎不适合我
-
我只是将这个目录符号链接到我自己的库目录并将所有脚本存储在那里。工作得很好。
-
已经决定在再次找到这个主题后再试一次,并设法让它在上面这样运作!赞成并悔恨道歉:)
-
这非常完美,我在正确的轨道上,但python -m site --user-site和(create the directory if it doesn't exist)部分是我失去的工作。
-
在2.7.4中,此python -m site --user-site不会向屏幕打印任何内容
-
确定这适用于2.7.4:python -c $'import site
print site.USER_SITE'
-
如果使用virtualenv,SITEDIR(从上面)文件夹是否应该更改?因为我没有改变,但不知道是不是因为我的主要Python安装在PATH中,或者是因为virtualenv中的Python仍然使用与SITEDIR相同的文件夹。
-
我做了这个,但由于某种原因,eclipse(我使用的IDE)没有找到我从文件夹中创建的导入我只是为.pth文件。我重启了日食,但无济于事。
-
python路径已正确添加。当我执行print';'。join(sys.path)路径显示正确时,我的问题只是eclipse没有看到路径并在我尝试导入库时给出错误。
-
我是否需要采取额外步骤,以便python能够识别添加到somelib.pth的路径?如果没有,任何猜测为什么这可能不起作用?
这适用于Windows
在Windows上,使用Python 2.7转到Python安装文件夹。
打开Lib / site-packages。
将example.pth空文件添加到此文件夹。
添加文件所需的路径,每行一个。
然后,您将能够从脚本中查看这些路径中的所有模块。
-
IMO,这是最好的解决方案,因为它不依赖于shell或工作环境的选择。也可以在linux上运行,默认的python路径是"/usr/local/lib/pythonX.Y/site-packages"。如果这不起作用,请尝试将.pth文件放入dist-packages目录。
-
Windows 7,Python 3.6.5。这就是答案。正如auserdude所写:在Python的Lib / site-packages文件夹中创建"example.pth",然后像这样添加你的路径:C: somefolder anotherfolder targetfolder
-
优秀的答案,也适用于Windows 10上的python 3.7,我的Windows 10路径是:"C: Users {usrName} AppData Local Programs Python Python37-32 Lib"
万一有人仍然感到困惑 - 如果你在Mac上,请执行以下操作:
打开终端
输入open .bash_profile
在弹出的文本文件中,在末尾添加以下行:
export PYTHONPATH=$PYTHONPATH:foo/bar
保存文件,重新启动终端,然后就完成了
-
有人想知道如何看到python的路径,使用:哪个python
-
很确定你也需要重新加载终端
您可以通过pythonrc文件添加路径,默认为linux上的?/ .pythonrc。即。
1 2
| import sys
sys.path.append('/path/to/dir') |
您还可以在全局rc文件中设置PYTHONPATH环境变量,例如在mac或linux上的~/.profile,或通过控制面板 - >系统 - >高级选项卡 - >窗口上的环境变量。
-
sys.path.append('/ path / to / dir')不会永久添加该条目。
为了进行更多解释,Python将使用site.py脚本(通常位于sys.prefix + lib/python/site-packages以及lib/site-python)自动构建其搜索路径(如上所述)。可以获取sys.prefix的值:
1
| python -c 'import sys; print(sys.prefix)' |
然后,site.py脚本根据平台(例如/usr/{lib,share}/python/dist-packages,/usr/local/lib/python/dist-packages)向搜索路径添加许多目录,并在这些路径中搜索包含特定其他搜索路径的.pth配置文件。例如,easy-install维护其已安装软件包的集合,这些软件包被添加到系统特定文件中,例如在Ubuntu上的/usr/local/lib/python2.7/dist-packages/easy-install.pth。在典型的系统上,有一堆这些.pth文件可以解释sys.path中的一些意外路径:
1
| python -c 'import sys; print(sys.path)' |
因此,可以创建.pth文件并放入任何这些目录(包括上面提到的sitedir)。这似乎是大多数软件包添加到sys.path的方式,而不是使用PYTHONPATH。
注意:在OSX上,site.py为'框架构建'添加了一个特殊的附加搜索路径(但似乎适用于python的正常命令行使用):/Library/Python//site-packages(例如对于Python2.7:/Library/Python/2.7/site-packages/),这是应该安装第三方软件包的地方(参见该目录中的自述文件)。因此,可以在其中添加包含其他搜索路径的路径配置文件,例如创建一个名为/Library/Python/2.7/site-packages/pip-usr-local.pth的文件,其中包含/usr/local/lib/python2.7/site-packages/,然后系统python将添加该搜索路径。
对我来说,当我更改.bash_profile文件时,它可以工作。只需更改.bashrc文件,直到我重新启动shell。
对于python 2.7,它应该看起来像:
1
| export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python" |
在.bash_profile文件的末尾。
-
如果我理解正确,这将导出通过终端启动的Python会话的变量吗?
-
@jxramos - 是的!
在linux上,您可以创建从包到PYTHONPATH目录的符号链接,而无需处理环境变量。就像是:
1
| ln -s /your/path /usr/lib/pymodules/python2.7/ |
如果PYTHONPATH当前不存在(由于:),则将export PYTHONPATH="${PYTHONPATH}:/my/other/path"添加到?/ .bashrc可能不起作用。
1 2
| export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2" |
在Ubuntu 16.04上将上面的内容添加到我的?/ .bashrc中
-
我做了echo PYTHONPATH但没有出现!这意味着这个PYTHONPATH尚未初始化,所以我只需将此行export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/object_detection粘贴到我的~/.bashrc文件中并source ~/.bashrc 。后来,当我回复'$ PYTHONPATH`时,它给了我:/TensorFlow/models/research/object_detection,有关我是否做错了什么的建议?
-
export PYTHONPATH=/TensorFlow/models/research/object_detection,当您第一次导出PYTHONPATH时,必须在没有${PYTHONPATH}:部分的情况下进行PYTHONPATH
-
谢谢,但每当我重新启动我的计算机时,python路径将重置为我设置的第一个即:/TensorFlow/models/research/object_detection并删除第二个export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim。对此提出任何建议,如何解决?
只需添加awesomo的答案,您也可以将该行添加到~/.bash_profile或~/.profile中
-
如果使用登录shell,请添加到.bash_profile,否则使用.profile
在MacOS上,而不是提供特定库的路径。提供到根项目文件夹的完整路径
让我的一天,例如:
1
| export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path" |
在这之后:
我在Windows Vista,Python 3.5中永久添加
系统>控制面板>高级系统设置>高级(点击)环境变量>系统变量>(如果在变量列中没有看到PYTHONPATH)(单击)新建>变量名称:PYTHONPATH>变量值:
请在Variable值中写下目录。这是Blue Peppers答案的细节。
添加PYTHONPATH的新路径正在手动执行:
在终端中添加?/ .bashrc配置文件的路径:
将以下内容粘贴到您的个人资料
1
| export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule" |
然后,确保在终端中运行代码时获取bashrc配置文件:
希望这可以帮助。
A < - > B之间的最短路径是直线;
1 2 3
| import sys
if not 'NEW_PATH' in sys.path:
sys.path += ['NEW_PATH'] |
在Python 3.6.4中,你可以在python会话中持久化sys.path,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import sys
import os
print(str(sys.path))
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")
sys.path.insert(0, root_dir)
print(str(sys.path)) |
我强烈建议你使用virtualenv和virtualenvwrapper,否则你会混乱你的道路
下面的脚本适用于所有平台,因为它是纯Python。它利用了路径库路径,这里记录了https://docs.python.org/3/library/pathlib.html,以使其跨平台工作。你运行一次,重新启动内核就是这样。灵感来自https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path
if str(to_add) not in path:
minLen=999999
for index,directory in enumerate(path):
if 'site-packages' in directory and len(directory)<=minLen:
minLen=len(directory)
stpi=index
pathSitePckgs=Path(path[stpi])
with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
pth_file.write(str(to_add)) |