7

导入非内置模块时,解释器在sys.path. sys.path从这些位置初始化(http://docs.python.org/library/sys.html#sys.path):

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

虽然前两个来源是直截了当的,但任何人都可以解释第三个是如何工作的,以及影响它的可能性是什么?

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

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

2 回答 2

3

第三个源的基础是在编译时(或者更准确地说是配置时)设置的,具体取决于平台。然后在运行时通过.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')
    

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

于 2012-06-11T04:08:33.907 回答
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)。

于 2012-12-12T10:43:38.667 回答