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


33

在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']

因此该路径显然不是Python二进制文件内置的默认路径。

是否有一个包含上面条目的配置文件?还是可以通过哪些方式进行修改?

Answers:


27

网站模块文档修改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()


1
谢谢,工作完美:)(我最终在.usr / local / python2.6 / dist
packages中

1
您还可以创建一个名为的模块sitecustomize.pysite.py尝试在该模块中进行导入和修改sys.path
TestUser16418'​​2

5

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

PYTHONPATH="/usr/local/lib/python2.6/site-packages/":"${PYTHONPATH}"
export PYTHONPATH

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


7
这确实不是普遍的。/etc/profile.d机制仅适用于具有使用/etc/profile.d(bash / ksh / zsh)的shell的用户的登录shell。我确定csh用户不会看到此更改。另外,在cron / at作业中将被忽略。
Rich Homolka

2
这是设置全局环境变量的一种好方法(不过我今天学到了另一件事),但是正如我在帖子中提到的那样,我正在寻找一种更Python化的方法:)
Latanius

4

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

  • .pth文件
  • PYTHONPATH

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

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

PYTHONPATH是操作系统的环境变量。在UNIX系统上,您用列出它们env。如@ TestUser16418所述,通过文件夹内的.sh脚本对此类变量进行全局修改/etc/profile.d/


2
它是没有“ _”的PYTHONPATH
heroxbd

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.