繁体   English   中英

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

[英]Creating a secondary site-packages directory (and loading packages from .pth files therein)

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


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

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

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

最简单的方法是创建一个名为sitecustomize.pyusercustomize.py的文件,并将其放在当前的PYTHONPATH目录(或最终在sys.path上的任何目录)中,其中包含以下内容:

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

当Python开始时,尝试导入sitecustomize然后usercustomize ,这就是为什么这样做的原因。 从网站文档:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM