导入非内置模块时,解释程序会搜索sys.path
给出的位置。 sys.path
已从这些位置(http://docs.python.org/library/sys.html#sys.path)初始化:
虽然前两个来源是直截了当的,但任何人都可以解释第三个来源是如何工作的,以及影响它的可能性是什么?
虽然我对一般解决方案感兴趣,但我的具体问题是:
/Library/Python/2.7/
导入numpy,这是superpack安装它们的地方,而不是从enthought站点包中导入。wxPython
py2app
创建的-A
应用程序与使用sys.path
启动应用程序时的python start_app.py
不同。 答案 0 :(得分:2)
第三个源的基础是在编译时设置的(或者更精确地配置时间),具体取决于平台。然后通过.pth
文件等将其扩展并添加到运行时(一旦编译Python可执行文件以影响第三个源,就可以执行此操作)。
Python文档的这一页包含有关.pth
文件工作方式的所有信息,以及有关如何根据构建时设置等构建sys.path
的更多信息。http://docs.python.org/library/site.html < / p>
我不确定为什么你要特别影响第三个来源,当你可以影响整个sys.path
时。无论如何,影响sys.path
的三种方式(不重新编译Python或修补源代码)是:
.pth
文件并将其放在Python扫描包的位置。 (详见前面的链接。)以编程方式导入sys
,然后追加或添加到sys.path
import sys
sys.path.insert(0, '/this/path/will/be/considered/first')
希望这三种方式中的一种可以帮助你做你想做的事。
答案 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)。