【问题标题】:Creating a secondary site-packages directory (and loading packages from .pth files therein)创建辅助站点包目录(并从其中的 .pth 文件加载包)
【发布时间】:2012-05-28 10:51:48
【问题描述】:

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


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

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

【问题讨论】:

    标签: python pythonpath


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      看看site 模块。它提供了函数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 为真,则尝试导入名为usercustomize 的模块,该模块可以执行任意用户特定的自定义。该文件旨在在用户站点包目录(见下文)中创建,该目录是sys.path 的一部分,除非被-s 禁用。 ImportError 将被忽略。

      【讨论】:

      • sitecustomize.py 或 usercustomize.py 在启动时会自动运行吗?编辑:yes, yes they do。谢谢!
      • @MattB。是的,用一些附加信息编辑了我的答案。该文档来自我在回答中链接的站点模块页面的顶部。
      • 我仍然不完全了解网站是如何工作的,但是:(1)不应该通过addsitedir('/usr/local'),即替代前缀(但它不适用于me),或 (2) addsitedir('/usr/local/lib/python2.7/site-packages') 追加路径,在第二种情况下,为什么不直接将其添加到 PYTHONPATH 中?
      • 回答我自己:使用 site.addsitedir 的不同之处在于 .pth 文件是“执行”的。然而,我的一位同事告诉我,这个功能不再需要了。会有人不同意吗?
      • 提示:使用usercustomize。在某些 linux 发行版上存在全局站点自定义,在某些不存在。这可能会导致令人困惑的行为。没有 linux 发行版提供 usercustomize。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 2016-11-27
      • 2017-11-28
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 2021-06-14
      相关资源
      最近更新 更多