如何在Mac OS X上确定python模块搜索路径?

时间:2012-06-08 19:32:59

标签: python macos pythonpath sys.path

导入非内置模块时,解释程序会搜索sys.path给出的位置。 sys.path已从这些位置(http://docs.python.org/library/sys.html#sys.path)初始化:

  1. 包含输入脚本(或当前目录)的目录
  2. PYTHONPATH
  3. 依赖于安装的默认值
  4. 虽然前两个来源是直截了当的,但任何人都可以解释第三个来源是如何工作的,以及影响它的可能性是什么?

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

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

2 个答案:

答案 0 :(得分:2)

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

Python文档的这一页包含有关.pth文件工作方式的所有信息,以及有关如何根据构建时设置等构建sys.path的更多信息。http://docs.python.org/library/site.html < / p>

我不确定为什么你要特别影响第三个来源,当你可以影响整个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')
    
  4. 希望这三种方式中的一种可以帮助你做你想做的事。

答案 1 :(得分:1)

在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)。