创建二级站点包目录(从.pth文件和装载包内)(Creating a secondary site-

2019-06-24 15:39发布

我想一些包安装到第三方site-packages目录(超出标准的系统中的位置)。 有什么办法来设置这使得.pth那里的文件被尊重?


背景:我使用的是OS X,virtualenv中,和自制。 有没有经过很好的点子安装到virtualenv中了几包(特别是wxPython的在我的情况)。 在这种情况下,有代替他们工作自制包。 家酿创建在第三站点包文件夹/usr/local/lib/python2.7 。 我想简单地指向此文件夹,并将所有项目的维护有下brew的控制。 不过,看来,这是不可能的。

  • 附加到通过路径$PYTHONPATH不加载.pth文件。 ( 是否应的Python 2.6在OS X上处理在$ PYTHONPATH多易install.pth文件? )
  • Python不容许嵌套或递归使用.pth文件。 ( 嵌套.pth文件或从网络加载额外的站点迪尔斯 )
  • 对于virtualenv中的包装add2virtualenv增加了一些额外的智慧超越仅仅拥有目录中列出的.pth文件,但我相信这只是重新排序的路径列表。

我肯定不是唯一一个对这个问题感兴趣。 我敢打赌在线好一些一般的“PTH文件不能正常工作的问题和帖子说我偶然发现了与此相关的问题。 有没有好的解决办法?

Answer 1:

看看该网站的模块。 它提供的功能addsitedir应该做你想要什么。

用最简单的方法是创建一个文件名为sitecustomize.pyusercustomize.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 。 一个ImportError将被忽略。



Answer 2:

有PEP 370专门针对每个用户创建site-packages目录,处理,其中用户对全系统没有管理权限的情况下site-packages

例如在Unix(包括Mac OS),并假设一个使用Python 3.6,可以创建下面的目录,并将.pth文件里面就有

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



文章来源: Creating a secondary site-packages directory (and loading packages from .pth files therein)