如何全局修改默认的 PYTHONPATH (sys.path)?

Lat*_*ius 37 linux python path ubuntu

在 Ubuntu (10.10) 系统上,我有一个 Python 包,可以将自身安装到/usr/local/lib/python2.6/site-packages/. 这不包含在默认路径 (sys.path) 中。如何将此目录添加到路径中?

设置$PYTHONPATH环境变量当然是一种解决方案,但我正在寻找一种更优雅的方法来做到这一点。例如easy_install还把安装的包放在里面,我的 sys.path 看起来像这样:

['', '/usr/local/lib/python2.6/dist-packages/keyring-0.5.1-py2.6.egg', 
'/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk',  
'/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', 
'/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', 
'/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/pymodules/python2.6', 
'/usr/lib/pymodules/python2.6/gtk-2.0']
Run Code Online (Sandbox Code Playgroud)

所以该路径显然不是 Python 二进制文件中内置的默认路径。

是否有一个包含上述条目的配置文件?或者可以通过什么方式修改它?

Mik*_*kel 29

网站模块文档修改Python的搜索路径似乎是你在找什么。

据我了解,这些条目被添加到sys.path

  • /usr/lib/python2.6/site.py
  • /usr/lib/python2.6/dist-packages/site.py
    (将 2.6 更改为您的 Python 版本。)

更改它的最简单方法是添加一个/usr/local/lib/python2.6/dist-packages/site-packages.pth包含../site-packages.

或者,也许您可​​以教软件包使用site.getsitepackages()?

  • 您还可以创建一个名为“sitecustomize.py”的模块,“site.py”尝试在那里导入和修改“sys.path”。 (2认同)

kat*_*aso 8

我想总结一下我对 python 路径修改的发现。有两种方法可以做到。

  • .pth文件
  • PYTHONPATH

在默认路径(见下文)中找到的任何.pth文件都将其内容包含到.pth文件中sys.path。所述.pth文件的格式很简单:每行一个(文件夹)路径。令人惊讶的是,路径可以是绝对的,也可以是相对于.pth文件的。

默认路径是解释器所在的<some-prefix>/lib/python<version>/site-packages位置<some-prefix>,通常是/usr/.

PYTHONPATH是操作系统的环境变量。在 unix 系统上,您可以按env. 如@TestUser16418 所述,此类变量的全局修改是通过文件夹内的.sh脚本完成的/etc/profile.d/

  • 它是没有“_”的 PYTHONPATH (2认同)

Tes*_*418 6

您可以创建一个/etc/profile.d/local_python.sh包含内容的新文件

PYTHONPATH="/usr/local/lib/python2.6/site-packages/":"${PYTHONPATH}"
export PYTHONPATH
Run Code Online (Sandbox Code Playgroud)

这将为PYTHONPATH您系统上的所有登录用户设置变量。

  • 这真的不是万能的。/etc/profile.d 机制仅适用于拥有使用 /etc/profile.d (bash/ksh/zsh) 的 shell 的人的登录 shell。我确信 csh 用户不会看到这个变化。此外,将在 cron/at 作业中被忽略。 (7认同)
  • 这是设置全局环境变量的好方法(这是我今天学到的另一件事),但正如我在帖子中提到的,我正在寻找一种更 Pythonic 的方式:) (2认同)