Как определяется путь поиска модуля python в Mac OS X?

Когда импортируется не встроенный модуль, интерпретатор выполняет поиск в местах, указанныхsys.path. sys.path инициализируется из этих мест (http://docs.python.org/library/sys.html#sys.path):

the directory containing the input script (or the current directory) PYTHONPATH the installation-dependent default

Хотя первые два источника просты, может ли кто-нибудь объяснить, как работает третий, и какие существуют возможности для воздействия на него?

Хотя мне было бы интересно общее решение, мои конкретные проблемы:

I have installed the Enthought distribution 7.2 32-bit, and then Scipy-Superpack. Now enthought python tries to import numpy from /Library/Python/2.7/, which is where superpack installed them, instead of from the enthought site-packages. a wxPython application created with py2app -A does not have the same sys.path as when starting the application with python start_app.py.

Ответы на вопрос(2)

что Enthought python искал модули в /Library/Python/2.7/. По-видимому, это было вызвано файлом easy-install.pth, расположенным в /Library/Python/2.7/site-packages. После изменения расширения этого файла Enthought python импортировал модули Enthought (из /Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages).

Решение Вопроса

если точнее, во время настройки), в зависимости от платформы. Затем он расширяется и добавляется во время выполнения с помощью.pth файлы и т. д. (что вы можете сделать после компиляции исполняемого файла Python для воздействия на этот третий источник).

Эта страница документации Python содержит всю информацию о том, как.pth файлы работают, а также больше информации о том, какsys.path построен из настроек времени сборки и т. д.http://docs.python.org/library/site.html

Я не уверен, почему вы хотите конкретно влиять на этот третий источник, когда вы можете влиять на весьsys.path, Во всяком случае, три способа влиянияsys.path (без перекомпиляции Python или исправления исходного кода):

Via the PYTHONPATH environment variable. By creating .pth files and dropping them where Python scans for packages. (See the link earlier for details.)

Programmatically, by importing sys and then appending or prepending to sys.path

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

Надеюсь, один из этих трех способов поможет вам сделать то, что вы хотите.

Ваш ответ на вопрос