【问题标题】:How is the python module search path determined on Mac OS X?Mac OS X 上的 python 模块搜索路径是如何确定的?
【发布时间】:2012-06-12 21:03:50
【问题描述】:

当一个非内置模块被导入时,解释器在sys.path给出的位置进行搜索。 sys.path 从这些位置初始化 (http://docs.python.org/library/sys.html#sys.path):

  1. 包含输入脚本的目录(或当前目录)
  2. PYTHONPATH
  3. 依赖于安装的默认值

虽然前两个来源是直截了当的,但谁能解释第三个是如何工作的,以及影响它的可能性有哪些?

虽然我对通用解决方案感兴趣,但我的具体问题是:

  • 我已经安装了Enthought distribution 7.2 32-bit,然后是Scipy-Superpack。现在,enthought python 尝试从 /Library/Python/2.7/ 导入 numpy,这是 superpack 安装它们的地方,而不是从 enthought 站点包中导入。
  • 使用py2app -A 创建的wxPython 应用程序与使用python start_app.py 启动应用程序时的sys.path 不同。

【问题讨论】:

    标签: python macos pythonpath sys.path


    【解决方案1】:

    第三个源的基础是在编译时(或者更准确地说是配置时)设置的,具体取决于平台。然后在运行时通过 .pth 文件等对其进行扩展和添加(一旦编译 Python 可执行文件以影响第三个源,您就可以执行此操作)。

    此 Python 文档页面包含有关 .pth 文件如何工作的所有信息,以及有关如何从构建时设置等构造 sys.path 的更多信息。http://docs.python.org/library/site.html

    我不确定你为什么要专门影响第三个来源,因为你可以影响整个sys.path。总之,影响sys.path的三种方式(无需重新编译Python或修补源代码)是:

    1. 通过 PYTHONPATH 环境变量。
    2. 通过创建 .pth 文件并将它们放到 Python 扫描包的位置。 (有关详细信息,请参阅前面的链接。)
    3. 以编程方式,通过导入sys,然后附加或附加到sys.path

      import sys
      sys.path.insert(0, '/this/path/will/be/considered/first')
      

    希望这三种方法中的一种可以帮助您做您想做的事。

    【讨论】:

    • 感谢您的回答!我对第三个来源特别感兴趣的原因是在PYTHONPATH 中没有不需要的库的情况下,这会导致我无法直接访问 sys.path 的错误,例如在构建 sphinx 文档时。
    【解决方案2】:

    在 Mac OS X 10.7.5 系统上,我也遇到了 Enthought python 正在 /Library/Python/2.7/ 中寻找模块的问题。显然,这是由位于 /Library/Python/2.7/site-packages 中的文件 easy-install.pth 引起的。更改此文件的扩展名后,Enthought python 导入了 Enthought 模块(来自 /Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-12
      • 2011-04-01
      • 2018-04-09
      • 2011-03-24
      • 2015-02-03
      • 1970-01-01
      • 2013-09-02
      相关资源
      最近更新 更多