Joh*_*ard 293 python windows save sys pythonpath
每当我使用时sys.path.append,都会添加新目录.但是,一旦我关闭python,列表将恢复到之前的(默认?)值.如何永久添加目录PYTHONPATH?
awe*_*omo 403
如果您正在使用bash(在Mac或GNU/Linux发行版上),请将其添加到您的 ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 125
您需要将新目录添加到环境变量中PYTHONPATH,并用冒号与之前的内容分隔.在任何形式的Unix中,你都可以在适合你正在使用的任何shell的启动脚本中执行该操作(.profile或者根据你最喜欢的shell,使用一个命令),该命令同样取决于所讨论的shell; 在Windows中,您可以通过系统GUI执行此操作.
superuser.com 可能是一个更好的地方进一步询问,即如果您需要有关如何在您选择的平台和shell中丰富环境变量的详细信息,请提供更多详细信息,因为它本身并不是一个编程问题.
sth*_*sth 82
PYTHONPATH您也可以创建路径配置文件,而不是操纵.首先找出Python搜索此信息的目录:
python -m site --user-site
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这似乎在Python 2.7中不起作用.在那里你可以使用:
python -c 'import site; site._script()' --user-site
Run Code Online (Sandbox Code Playgroud)
然后.pth在该目录中创建一个包含要添加的路径的文件(如果该目录不存在,则创建该目录).
例如:
# 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"
Run Code Online (Sandbox Code Playgroud)
aus*_*ude 34
这适用于Windows
然后,您将能够从脚本中查看这些路径中的所有模块.
ent*_*aul 21
万一有人仍然感到困惑 - 如果你在Mac上,请执行以下操作:
open .bash_profileexport PYTHONPATH=$PYTHONPATH:foo/barBlu*_*ers 20
您可以通过pythonrc文件添加路径,默认为linux上的〜/ .pythonrc.即.
import sys
sys.path.append('/path/to/dir')
Run Code Online (Sandbox Code Playgroud)
您还可以PYTHONPATH在全局rc文件中设置环境变量,例如~/.profile在mac或linux上,或通过控制面板 - >系统 - >高级选项卡 - >窗口上的环境变量.
Pie*_*erz 15
为了给出一个位更多的解释,Python将自动构建其搜索路径(如所提到的上述和这里使用)site.py脚本(通常位于sys.prefix + lib/python<version>/site-packages以及lib/site-python).可以获取sys.prefix的值:
python -c 'import sys; print(sys.prefix)'
Run Code Online (Sandbox Code Playgroud)
该site.py脚本,然后增加了一些目录,依赖于平台,比如/usr/{lib,share}/python<version>/dist-packages,/usr/local/lib/python<version>/dist-packages搜索路径,并搜索这些路径<package>.pth包含特定的附加搜索路径配置文件.例如,easy-install维护其已安装软件包的集合,这些软件包被添加到系统特定文件中,例如在Ubuntu上/usr/local/lib/python2.7/dist-packages/easy-install.pth.在典型的系统上,有一堆这些.pth文件可以解释sys.path中的一些意外路径:
python -c 'import sys; print(sys.path)'
Run Code Online (Sandbox Code Playgroud)
因此,可以创建.pth文件并放入任何这些目录(包括上面提到的sitedir ).这似乎是大多数软件包添加到sys.path的方式,而不是使用PYTHONPATH.
注意:在OSX上有一个特殊的附加搜索路径,由site.py为'框架构建'添加(但似乎适用于python的正常命令行使用):( /Library/Python/<version>/site-packages例如对于Python2.7:)/Library/Python/2.7/site-packages/这是第三方软件包所在的位置要安装(参见该目录中的自述文件).因此,可以在其中添加包含其他搜索路径的路径配置文件,例如,创建一个名为/Library/Python/2.7/site-packages/pip-usr-local.pthcontains 的文件/usr/local/lib/python2.7/site-packages/,然后系统python将添加该搜索路径.
Pet*_*per 10
对我来说,当我更改.bash_profile文件时它起作用了.只更改.bashrc文件只能重新启动shell.
对于python 2.7,它应该看起来像:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
Run Code Online (Sandbox Code Playgroud)
在.bash_profile文件的末尾.
在linux上,您可以创建从包到PYTHONPATH目录的符号链接,而无需处理环境变量.就像是:
ln -s /your/path /usr/lib/pymodules/python2.7/
Run Code Online (Sandbox Code Playgroud)
小智 7
export PYTHONPATH="${PYTHONPATH}:/my/other/path"如果PYTHONPATH当前不存在,则添加到〜/ .bashrc可能不起作用(因为:).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
Run Code Online (Sandbox Code Playgroud)
在Ubuntu 16.04上将上面的内容添加到我的〜/ .bashrc中
下面的脚本适用于所有平台,因为它是纯 Python。它利用https://docs.python.org/3/library/pathlib.html中记录的 pathlib 路径来使其跨平台工作。您运行一次,重新启动内核即可。灵感来自https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574。为了运行它,它需要管理员权限,因为您修改了一些系统文件。
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))
Run Code Online (Sandbox Code Playgroud)
在MacOS上,而不是提供到特定库的路径。提供到根项目文件夹的完整路径
~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
让我过得愉快,例如:
export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"
Run Code Online (Sandbox Code Playgroud)
在此之后:
source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
这是对该线程的更新,其中包含一些旧答案。
对于那些使用 MAC-OS Catalina 或某些较新版本 (>= 10.15) 的用户,引入了一个名为的新终端zsh(旧终端的替代品bash)。
由于这一更改,我对上面的答案遇到了一些问题,我通过创建文件~/.zshrc并将文件目录粘贴到$PATH和$PYTHONPATH
所以,首先我做了:
nano ~/.zshrc
Run Code Online (Sandbox Code Playgroud)
当编辑器打开时,我粘贴了以下内容:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
Run Code Online (Sandbox Code Playgroud)
保存它,并重新启动终端。
重要提示:上面的路径设置为我计算机的路径,您必须将其适应您的 python。