永久添加目录到PYTHONPATH?

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)

  • 记住编辑``〜/ .bashrc``然后运行``source~/.bashrc``,请参阅http://stackoverflow.com/questions/2518127/how-do-i-reload-bashrc-without-logging-彻头彻尾的背式 (41认同)
  • 这对我来说非常合适,但请确保您指向的目录位于目录结构中最顶层的__init__.py文件中.起初这对我来说并不是很清楚.例如,我尝试**导出PYTHONPATH = $ PYTHONPATH:/ Users/joey/repos**但它没有用,因为我的repos目录没有\ __ init__.py.再往下走一个目录:**/Users/joey/repos/specificRepo**就可以了.现在python可以遍历任何连接到包含__init__.py的specificRepo目录的向下目录! (28认同)
  • 它对我不起作用:(使用Ubuntu 14.04 (9认同)
  • 这对我有用,但你能解释这个PYTHONPATH变量的位置吗?以及"导出PYTHONPATH"如何知道找到确切的文件? (3认同)
  • 我认为将 `sudo su` 放在 .bashrc 文件的开头是个坏主意。[这篇文章](http://askubuntu.com/questions/34530/executing-a-super-user-command-through-bashrc) 同意我的看法。至少在我的系统上,它甚至没有必要。 (2认同)
  • 为什么这让我觉得 python 部署到生产可能是一件痛苦的事。 (2认同)

Ale*_*lli 125

您需要将新目录添加到环境变量中PYTHONPATH,并用冒号与之前的内容分隔.在任何形式的Unix中,你都可以在适合你正在使用的任何shell的启动脚本中执行该操作(.profile或者根据你最喜欢的shell,使用一个命令),该命令同样取决于所讨论的shell; 在Windows中,您可以通过系统GUI执行此操作.

superuser.com 可能是一个更好的地方进一步询问,即如果您需要有关如何在您选择的平台和shell中丰富环境变量的详细信息,请提供更多详细信息,因为它本身并不是一个编程问题.

  • 勘误:窗户上的分隔符是分号.如果需要覆盖Windows上的系统路径,则通过GUI设置用户环境变量可能不够,因为用户变量会附加到系统变量中.在这些情况下,您需要使用启动脚本进行必要的调整. (8认同)

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)

  • 我只是将这个目录符号链接到我自己的库目录并将所有脚本存储在那里.工作得很好. (4认同)

aus*_*ude 34

这适用于Windows

  1. 在Windows上,使用Python 2.7转到Python安装文件夹.
  2. 打开Lib/site-packages.
  3. 将example.pth空文件添加到此文件夹.
  4. 添加文件所需的路径,每行一个.

然后,您将能够从脚本中查看这些路径中的所有模块.

  • IMO,这是最好的解决方案,因为它不依赖于shell或工作环境的选择.也可以在linux上运行,默认的python路径是"/usr/local/lib/pythonX.Y/site-packages".如果这不起作用,请尝试将.pth文件放入dist-packages目录. (3认同)
  • Windows 7,Python 3.6.5。这就是答案。正如 auserdude 所写:在 Python 的 Lib/site-packages 文件夹中创建“example.pth”,然后像这样添加您的路径:C:\somefolder\anotherfolder\targetfolder (2认同)
  • 很好的答案,也适用于 Windows 10 上的 python 3.7,我的 Windows 10 路径是:“C:\Users\{usrName}\AppData\Local\Programs\Python\Python37-32\Lib” (2认同)

ent*_*aul 21

万一有人仍然感到困惑 - 如果你在Mac上,请执行以下操作:

  1. 打开终端
  2. 类型 open .bash_profile
  3. 在弹出的文本文件中,在末尾添加以下行: export PYTHONPATH=$PYTHONPATH:foo/bar
  4. 保存文件,重新启动终端,然后就完成了

  • 任何想知道如何查看 python 路径的人,请使用:**which python** (3认同)

Blu*_*ers 20

您可以通过pythonrc文件添加路径,默认为linux上的〜/ .pythonrc.即.

import sys
sys.path.append('/path/to/dir')
Run Code Online (Sandbox Code Playgroud)

您还可以PYTHONPATH在全局rc文件中设置环境变量,例如~/.profile在mac或linux上,或通过控制面板 - >系统 - >高级选项卡 - >窗口上的环境变量.

  • sys.path.append('/ path/to/dir')不会永久添加该条目. (38认同)

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文件的末尾.


Zah*_*Zah 9

在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中


and*_*anu 7

下面的脚本适用于所有平台,因为它是纯 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)


tes*_*ngh 7

在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)


Cai*_*ira 7

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

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


jan*_*nex 6

只需添加awesomo的答案,您也可以将该行添加到您的~/.bash_profile~/.profile