创建辅助站点包目录(并从其中的.pth文件加载包)

时间:2012-05-21 22:56:32

标签: python pythonpath

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


背景:我正在使用OS X,virtualenv和homebrew。有一些软件包(特别是我的wxPython)不能通过pip很好地安装到virtualenv中。在这些情况下,有自制软件包可以替代它们。 Homebrew在/usr/local/lib/python2.7中创建了第三个site-packages文件夹。我想简单地指向这个文件夹,并在brew的控件下保留所有项目。但是,似乎这是不可能的。

我当然不是唯一对此问题感兴趣的人。我打赌大量的通用“pth文件无法正常工作”的问题和在线发帖,我偶然发现与这个问题有关。有一个很好的解决方案吗?

2 个答案:

答案 0 :(得分:18)

查看site模块。它提供了addsitedir函数,它应该做你想要的。

使用它的最简单方法是创建一个名为sitecustomize.pyusercustomize.py的文件,并将其放在当前PYTHONPATH目录(或最终在{{1}的任何目录中}})具有以下内容:

sys.path

当Python开始时,尝试导入import site site.addsitedir('/usr/local/lib/python2.7') 然后导入sitecustomize,这就是为什么这样做的原因。从站点文档:

  

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

     

在此之后,尝试导入名为ImportError的模块,如果usercustomize为真,则可以执行任意特定于用户的自定义。此文件旨在在用户site-packages目录中创建(见下文),该目录是ENABLE_USER_SITE的一部分,除非sys.path禁用。 -s将被默默忽略。

答案 1 :(得分:1)

PEP 370专门针对每用户site-packages目录的创建,以处理用户无权访问系统范围site-packages的情况。

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

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