【发布时间】:2011-03-25 01:11:05
【问题描述】:
每当我使用sys.path.append 时,都会添加新目录。但是,一旦我关闭 python,列表将恢复到以前的(默认?)值。如何将目录永久添加到PYTHONPATH?
【问题讨论】:
标签: python windows pythonpath
每当我使用sys.path.append 时,都会添加新目录。但是,一旦我关闭 python,列表将恢复到以前的(默认?)值。如何将目录永久添加到PYTHONPATH?
【问题讨论】:
标签: python windows pythonpath
如果您使用的是 bash(在 Mac 或 GNU/Linux 发行版上),请将其添加到您的 ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
【讨论】:
~/.bashrc然后运行source ~/.bashrc见stackoverflow.com/questions/2518127/…
sudo su 放在 .bashrc 文件的开头是个坏主意。 This post 同意我的看法。至少在我的系统上,它甚至没有必要。
您需要将新目录添加到环境变量PYTHONPATH 中,并用冒号与之前的内容分隔。在任何形式的 Unix 中,您都可以在适合您使用的任何 shell(.profile 或其他任何内容,取决于您最喜欢的 shell)的启动脚本中执行此操作,该命令再次取决于所讨论的 shell;在 Windows 中,您可以通过系统 GUI 来实现。
superuser.com 可能是一个更好的地方进一步询问,即如果您需要有关如何在您选择的平台和 shell 中丰富环境变量的详细信息,请了解更多详细信息,因为它本身并不是一个真正的编程问题。
【讨论】:
除了操作PYTHONPATH,您还可以创建path configuration file。首先找出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"
【讨论】:
python -m site --user-site 和 (create the directory if it doesn't exist) 部分是我所缺少的它工作。
somelib.pth 的添加路径?如果没有,有什么猜测为什么这可能不起作用?
这适用于 Windows
然后您将能够从脚本中看到这些路径中的所有模块。
【讨论】:
如果有人仍然感到困惑 - 如果您使用的是 Mac,请执行以下操作:
open .bash_profile
export PYTHONPATH=$PYTHONPATH:foo/bar
【讨论】:
export 键是我错过的东西!!!!,点赞,非常感谢!
您可以通过 pythonrc 文件添加路径,在 Linux 上默认为 ~/.pythonrc。即。
import sys
sys.path.append('/path/to/dir')
您还可以在全局 rc 文件中设置 PYTHONPATH 环境变量,例如 mac 或 linux 上的 ~/.profile,或通过控制面板 -> 系统 -> 高级选项卡 -> Windows 上的环境变量。
【讨论】:
为了给出更多解释,Python 将使用 site.py 脚本(通常位于 sys.prefix + lib/python<version>/site-packages 以及 @987654326 @)。可以获取sys.prefix的值:
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 config包含特定附加搜索路径的文件。例如,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 above)。这似乎是大多数包添加到 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 文件的末尾。
【讨论】:
如果 PYTHONPATH 当前不存在(因为 :),将 export PYTHONPATH="${PYTHONPATH}:/my/other/path" 添加到 ~/.bashrc 可能不起作用。
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
将以上内容添加到我的 ~/.bashrc 对我来说在 Ubuntu 16.04 上起到了作用
【讨论】:
echo PYTHONPATH,但什么也没出现!这意味着这个 PYTHONPATH 还没有被初始化,所以我把这行export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detection 粘贴到我的~/.bashrc 文件和source ~/.bashrc 中。后来,当我执行 `echo $PYTHONPATH` 时,它给了我:<PATH_TO_TF>/TensorFlow/models/research/object_detection,如果我做错了什么有什么建议吗?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection,当您第一次导出 PYTHONPATH 时,您必须在没有 ${PYTHONPATH}: 部分的情况下执行此操作
:<PATH_TO_TF>/TensorFlow/models/research/object_detection,并删除第二个export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim。对此有何建议,如何解决?
只是为了添加 awesomo 的答案,您还可以将该行添加到您的 ~/.bash_profile 或 ~/.profile
【讨论】:
.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。它利用了 pathlib 路径,记录在此处https://docs.python.org/3/library/pathlib.html,以使其跨平台工作。你运行一次,重新启动内核,就是这样。灵感来自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))
【讨论】:
python -m site --user-site 返回的目录来避免管理员权限(以及整个路径搜索逻辑)。也称为python -c "import site; print(site.USER_SITE)"。你不能假设这个用户站点目录会存在,但你可以创建它。
向 PYTHONPATH 添加新路径是通过以下方式手动完成的:
在终端中添加 ~/.bashrc 配置文件的路径:
vim ~/.bashrc
将以下内容粘贴到您的个人资料中
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
然后,确保在终端中运行代码时获取 bashrc 配置文件:
source ~/.bashrc
希望这会有所帮助。
【讨论】:
我在 Windows Vista、Python 3.5 中永久添加
系统 > 控制面板 > 高级系统设置 > 高级(点击)环境变量 > 系统变量 >(如果在变量列中没有看到 PYTHONPATH)(单击)新建 > 变量名称:PYTHONPATH > 变量值:
请在变量值中写入目录。这是蓝辣椒的答案的详细信息。
【讨论】:
在 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 否则你会弄乱你的路径
【讨论】:
当我从 bash 切换到 zsh 时遇到了 Python Path 问题。
解决方案很简单,但我没有注意到。
Pip 向我展示了 scripts blah blah 或 package blah blah 安装在 不在路径中的 ~/.local/bin 中.
看了这个问题的一些解决方案后,我打开了我的.zshrc,发现解决方案已经存在了。
我只需要取消注释一行:
看看
【讨论】:
受 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)
【讨论】:
我在这里找到了在 anaconda 环境中执行此操作的解决方案:https://datacomy.com/python/anaconda/add_folder_to_path/
只是:
conda develop /your_path
【讨论】:
A之间的最短路径 B是直线;
import sys
if not 'NEW_PATH' in sys.path:
sys.path += ['NEW_PATH']
【讨论】: