如何将一个目录永久添加到PYTHONPATH中?

458
每当我使用sys.path.append时,新目录都会被添加。然而,一旦我关闭python,列表将恢复到以前(默认?)的值。如何永久地将一个目录添加到PYTHONPATH中?
24个回答

9

export PYTHONPATH="${PYTHONPATH}:/my/other/path" 添加到 ~/.bashrc 中可能无效,如果当前不存在 PYTHONPATH(因为有冒号 :)。

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 的输出。请问我是否做错了什么? - Anu
当您第一次导出PYTHONPATH时,需要将${PYTHONPATH}:部分省略掉。命令如下:export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection - boyangeor
谢谢,但是每次我重新启动电脑时,Python路径都会重置为我设置的第一个路径,即 :<PATH_TO_TF>/TensorFlow/models/research/object_detection,并删除第二个路径 export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim。对此有什么建议,如何解决? - Anu

7

这是对此线程的更新,其中包含一些旧答案。

对于那些使用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。


7
下面的脚本在所有平台上都可以工作,因为它是纯Python的。它使用了 pathlib Path,在这里有文档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))

1
我是手动完成的(去了Arnaud的页面..)。我必须以管理员身份运行我的文本编辑器,然后重新启动blender才能看到更改..所以我想,原则上,如果有一种方法可以改进这个答案或代码,那就是观察管理员特权的要求,并提供适当的解决方案。这超出了我的薪资范围(在更有经验的人会对此有意见..我把它留给他们!)XD - juggler
1
您可以通过将您的.pth文件写入python -m site --user-site返回的目录中来避免需要管理员权限(以及整个路径搜索逻辑)。这也称为“python -c“import site; print(site.USER_SITE)”。不能假设此用户站点目录已经存在,但可以创建它。 - Amit Naidu
太棒了,这段代码帮助我为我的需求创建了一些东西。谢谢! - DougR

6
仅作为 awesomo 的回答的补充,您还可以将该行添加到您的 ~/.bash_profile~/.profile 中。

如果您使用登录 shell,请添加到 .bash_profile,否则请使用 .profile - smac89

4
在终端手动添加新路径到PYTHONPATH的方法是:
将路径添加到 ~/.bashrc 配置文件中。
vim ~/.bashrc

将以下内容粘贴到您的个人资料中:

export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"

然后,在终端运行代码时,请确保每次都引用您的bashrc配置文件:

source ~/.bashrc 

希望这可以帮到您。

我知道这篇文章很旧,但如果您能解释一下什么是source命令? - Abdelhamed Abdin
1
@abdelhamedabdin source 命令可在当前 shell 环境中读取并执行指定作为参数的文件中的命令。它可以方便地将函数、变量和配置文件加载到 shell 脚本中。 - wpmoradi

2

我在Windows Vista和Python 3.5中永久添加了以下内容:

系统 > 控制面板 > 高级系统设置 > 高级(选项卡)环境变量 > 系统变量 > (如果在变量列中看不到PYTHONPATH)(点击)新建 > 变量名:PYTHONPATH > 变量值:

请在“变量值”中写入目录。这是Blue Peppers的答案的详细信息。


1
@y.y 哈哈...Windows Vista是在2006年发布的。我仍然认为在回答中提及运行时硬件环境是有帮助的 :) - Cloud Cho
1
您说得对,这也让我微笑:D 祝您有美好的一天,先生 :) - y.y

2

2

解决从bash切换到zsh时的Python路径问题

当我从bash切换到zsh时,遇到了Python路径问题。

解决方案很简单,但我没有注意到。

Pip向我显示,脚本 blah blah 软件包 blah blah 安装在不在路径中的 ~/.local/bin

阅读了一些关于此问题的解决方案后,我打开了我的.zshrc,发现解决方案已经存在。

我只需要取消注释一行:

看一下

Screenshot from 2020-10-07 13-38-17


0
在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,否则会使您的路径混乱不堪。


0
在Mac上:
user@terminal$ env PYTHONPATH=module_path python3
>>> import sys
>>> sys.path
['module_path', 'plus_other_python3_paths',...]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接