配置Python以使用站点包的其他位置

Kev*_*Kev 30 python packages

有没有办法告诉Python有关其他site-packages位置而不修改现有脚本?

在我的CentOS 5.5服务器上,我安装了一个Python 2.7安装,/opt/python2.7.2并且有一个site-packages文件夹/opt/python2.7.2/lib/python2.7/site-packages.

原因是我不想打扰5.5发行版附带的现有Python 2.4安装.

但是,第三方Python应用程序还在以下位置添加了一个site-packages文件夹:/usr/local/lib/python2.7/site-packages并将其自身安装在该位置.

这部分是我的错,因为我在安装之前没有PREFIX在应用程序中进行调整Makefile,但现在我无能为力.

我知道我可以这样做:

import sys; sys.path.insert(0, "/usr/local/lib/python2.7/site-packages")
Run Code Online (Sandbox Code Playgroud)

但是,这将涉及我追踪每个脚本并添加上述内容,如果将来有更新,这是不理想的.

为了解决这个问题,我在/opt/python2.7.2/lib/python2.7/site-packages第三方应用程序的位置创建了一个符号链接:

ln -sf /usr/local/lib/python2.7/site-packages/theapp /opt/python2.7.2/lib/python2.7/site-packages/theapp

这似乎工作正常,但我想知道是否有更好的方法?

Sha*_*hin 43

您可以使用特定站点的配置挂钩.

"路径配置文件是一个文件,其名称具有表格name.pth,并存在于上述四个目录之一中;其内容是要添加到的附加项目(每行一个)sys.path."

在您的情况下,您应该能够通过简单地放入.pth包含要包含的目录路径的文件来实现您想要的:

[root@home]$ echo "/usr/local/lib/python2.7/site-packages/" > /opt/python2.7.2/lib/python2.7/site-packages/usrlocal.pth
Run Code Online (Sandbox Code Playgroud)

  • 这会添加到python路径的*end*的路径.如果您希望自定义网站包首先出现怎么办?我一直在尝试使用sitecustomize.py文件取得了一些成功,但似乎只有简单地操作python路径的边缘情况是不够的. (4认同)

cfi*_*cfi 5

您可以使用包装器脚本替换python可执行文件,该脚本会将您添加的安装路径附加到PYTHONPATH。但是,这太过分了。

但是我会尝试修复附件的安装,以便它可以正确进入站点软件包目录。