20

我想将一些软件包安装到第三方site-packages目录(超出标准系统位置)。有什么方法可以设置它以便尊重其中的 .pth 文件?


背景:我正在使用 OS X、virtualenv 和 homebrew。有一些包(在我的例子中尤其是 wxPython)不能通过 pip 很好地安装到 virtualenv 中。在这些情况下,可以使用自制软件包来代替它们。Homebrew 在/usr/local/lib/python2.7. 我想简单地指向这个文件夹,并让那里的所有项目的维护都在brew's 的控制之下。然而,这似乎是不可能的。

我当然不是唯一对这个问题感兴趣的人。我敢打赌,我偶然发现的许多通用的“pth files not working”问题和在线帖子都与这个问题有关。有没有好的解决方案?

4

2 回答 2

21

看一下站点模块。它提供了addsitedir应该做你想做的事情的功能。

使用它的最简单方法是创建一个名为sitecustomize.pyor的文件usercustomize.py,并将其放在当前PYTHONPATH目录(或任何以 结尾的目录sys.path)中,内容如下:

import site
site.addsitedir('/usr/local/lib/python2.7')

当 Python 开始尝试导入时sitecustomize,然后usercustomize,这就是它起作用的原因。从网站文档:

在这些路径操作之后,尝试导入一个名为 的模块sitecustomize,该模块可以执行任意特定于站点的自定义。它通常由系统管理员在 site-packages 目录中创建。如果此导入因ImportError异常而失败,则会被静默忽略。

在此之后,尝试导入一个名为 的模块,如果为真usercustomize,该模块可以执行任意用户特定的自定义。ENABLE_USER_SITE该文件旨在在用户站点包目录(见下文)中创建,sys.path除非被-s. AnImportError将被默默地忽略。

于 2012-05-21T23:06:08.803 回答
1

PEP 370专门针对每个用户目录的创建,site-packages以处理用户对系统范围没有管理员访问权限的情况site-packages

例如在 Unix(包括 Mac OS)上,假设使用 Python 3.6,可以创建以下目录并.pth在其中放置文件

~/.local/lib/python3.6/site-packages

于 2017-12-16T08:59:48.090 回答