每当我使用sys.path.append
时,都会添加新目录。但是,一旦我关闭 python,列表将恢复到以前的(默认?)值。如何永久添加目录PYTHONPATH
?
21 回答
如果您使用 bash(在 Mac 或 GNU/Linux 发行版上),请将其添加到您的~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
您需要将新目录添加到环境变量PYTHONPATH
中,并用冒号与之前的内容分隔。在任何形式的 Unix 中,您都可以在适合您正在使用的任何 shell(.profile
或任何其他,取决于您最喜欢的 shell)的启动脚本中执行此操作,该命令再次取决于所讨论的 shell;在 Windows 中,您可以通过系统 GUI 来实现。
superuser.com
可能是一个更好的地方进一步询问,即如果您需要有关如何在您选择的平台和外壳中丰富环境变量的详细信息,请了解更多详细信息,因为它本身并不是一个真正的编程问题。
PYTHONPATH
您也可以创建路径配置文件,而不是进行操作。首先找出 Python 在哪个目录中搜索这些信息:
python -m site --user-site
出于某种原因,这似乎不适用于 Python 2.7。在那里你可以使用:
python -c 'import site; site._script()' --user-site
然后.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"
这适用于 Windows
- 在 Windows 上,使用 Python 2.7 转到 Python 设置文件夹。
- 打开 Lib/站点包。
- 将 example.pth 空文件添加到此文件夹。
- 将所需的路径添加到文件中,每行一个。
然后,您将能够从脚本中看到这些路径中的所有模块。
如果有人仍然感到困惑 - 如果您使用的是 Mac,请执行以下操作:
- 打开终端
- 类型
open .bash_profile
- 在弹出的文本文件中,在最后添加这一行:
export PYTHONPATH=$PYTHONPATH:foo/bar
- 保存文件,重启终端,大功告成
您可以通过您的 pythonrc 文件添加路径,该文件在 Linux 上默认为 ~/.pythonrc。IE。
import sys
sys.path.append('/path/to/dir')
您还可以PYTHONPATH
在全局 rc 文件中设置环境变量,例如~/.profile
在 mac 或 linux 上,或通过 Windows 上的控制面板 -> 系统 -> 高级选项卡 -> 环境变量。
为了给出更多解释,Python 将使用脚本(通常位于 sys.prefix +以及)自动构建其搜索路径(如上所述和此处)。可以获取 sys.prefix 的值:site.py
lib/python<version>/site-packages
lib/site-python
python -c 'import sys; print(sys.prefix)'
然后,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)'
因此可以创建一个 .pth 文件并将其放入这些目录中的任何一个(包括上面提到的 sitedir )。这似乎是将大多数包添加到 sys.path 的方式,而不是使用 PYTHONPATH。
注意:在 OSX 上,site.py 为“框架构建”添加了一个特殊的附加搜索路径(但似乎适用于 python 的正常命令行使用):(/Library/Python/<version>/site-packages
例如,对于 Python2.7: /Library/Python/2.7/site-packages/
)这是第 3 方包的位置要安装(请参阅该目录中的自述文件)。因此,可以在其中添加一个包含其他搜索路径的路径配置文件,例如创建一个名为/Library/Python/2.7/site-packages/pip-usr-local.pth
包含的文件/usr/local/lib/python2.7/site-packages/
,然后系统 python 将添加该搜索路径。
在 MacOS 上,而不是提供特定库的路径。提供根项目文件夹的完整路径
~/.bash_profile
让我开心,例如:
export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"
在此之后:
source ~/.bash_profile
在 linux 上,您可以创建从包到 PYTHONPATH 目录的符号链接,而无需处理环境变量。就像是:
ln -s /your/path /usr/lib/pymodules/python2.7/
对我来说,当我更改.bash_profile
文件时它起作用了。.bashrc
仅在我重新启动 shell 之前更改文件才有效。
对于 python 2.7,它应该如下所示:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
在.bash_profile
文件的末尾。
如果当前不存在(因为),添加export PYTHONPATH="${PYTHONPATH}:/my/other/path"
到 ~/.bashrc 可能不起作用。PYTHONPATH
:
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
将以上内容添加到我的 ~/.bashrc 在 Ubuntu 16.04 上对我有用
只是为了添加 awesomo 的答案,您还可以将该行添加到您的~/.bash_profile
或~/.profile
这是对该线程的更新,其中有一些旧答案。
对于那些使用 MAC-OS Catalina 或更新版本 (>= 10.15) 的用户,它引入了一个名为zsh
(旧的替代品bash
)的新终端。
由于此更改,我在上面的答案中遇到了一些问题,我通过创建文件~/.zshrc
并将文件目录粘贴到$PATH
和$PYTHONPATH
所以,首先我做了:
nano ~/.zshrc
当编辑器打开时,我粘贴了以下内容:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
保存它,然后重新启动终端。
重要提示:上面的路径设置为我的计算机的路径,您必须将其调整为您的 python。
下面的脚本适用于所有平台,因为它是纯 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))
通过以下方式手动添加到 PYTHONPATH 的新路径:
通过以下方式在终端中添加 ~/.bashrc 配置文件的路径:
vim ~/.bashrc
将以下内容粘贴到您的个人资料中
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
然后,确保在终端中运行代码时获取 bashrc 配置文件:
source ~/.bashrc
希望这可以帮助。
我在 Windows Vista 中永久添加了 Python 3.5
系统 > 控制面板 > 高级系统设置 > 高级(点击)环境变量 > 系统变量 >(如果在变量列中没有看到 PYTHONPATH)(单击)新建 > 变量名称:PYTHONPATH > 变量值:
请在变量值中写入目录。这是Blue Peppers答案的详细信息。
在 Python 3.6.4 中,您可以在 python 会话中保留 sys.path,如下所示:
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 否则你会弄乱你的路径
我在这里找到了在 anaconda 环境中执行此操作的解决方案:https ://datacomy.com/python/anaconda/add_folder_to_path/
只是:
conda develop /your_path
受 andrei-deusteanu 回答的启发,这是我的版本。这允许您在站点包目录中创建许多附加路径。
import os
# Add paths here. Then Run this block of code once and restart kernel. Paths should now be set.
paths_of_directories_to_add = [r'C:\GIT\project1', r'C:\GIT\project2', r'C:\GIT\project3']
# Find your site-packages directory
pathSitePckgs = os.path.join(os.path.dirname(os.__file__), 'site-packages')
# Write a .pth file in your site-packages directory
pthFile = os.path.join(pathSitePckgs,'current_machine_paths.pth')
with open(pthFile,'w') as pth_file:
pth_file.write('\n'.join(paths_of_directories_to_add))
print(pthFile)
修复从 bash 切换到 zsh 时的 Python 路径问题
当我从 bash切换到zsh时遇到了 Python 路径问题。
解决方案很简单,但我没有注意到。
Pip 向我展示了安装的脚本或 blah blah
软件包不在 path中。blah blah
~/.local/bin
在阅读了这个问题的一些解决方案后,我打开了我.zshrc
的解决方案,发现解决方案已经存在。
我不得不简单地取消注释一行:
看一看
A <-> B 之间的最短路径是直线;
import sys
if not 'NEW_PATH' in sys.path:
sys.path += ['NEW_PATH']