Как определяется путь поиска модуля python в Mac OS X?
при импорте не встроенного модуля интерпретатор выполняет поиск в местах, указанных sys.path
. sys.path
инициализируется из этих местоположений (http://docs.python.org/library/sys.html#sys.path):
- каталог, содержащий входной скрипт (или текущий каталог)
- PYTHONPATH
- установки-зависимый по умолчанию
в то время как первые два источника являются прямыми, может ли кто-нибудь объясните, как работает третий и какие существуют возможности для воздействия на него?
хотя я был бы заинтересован в общем решении, мои конкретные вопросы:
- Я установил восторженное распределение 7.2 32-бит, а потом Scipy-Superpack. Теперь enthought python пытается импортировать numpy из
/Library/Python/2.7/
, где superpack установил их, а не из восторженных сайтов-пакетов. - a
wxPython
Сpy2app
-A
нет жеsys.path
как при запуске приложения, сpython start_app.py
.
2 ответов
основа третьего источника устанавливается во время компиляции (точнее, во время настройки), в зависимости от платформы. Затем он расширяется и добавляется во время выполнения через .pth
файлы и т. д. (что вы можете сделать, как только исполняемый файл Python будет скомпилирован, чтобы повлиять на этот третий источник).
эта страница документации Python содержит всю информацию о том, как .pth
работают файлы, а также дополнительная информация о том, как sys.path
построено от установок строени-времени, etc. http://docs.python.org/library/site.html
Я не уверен, почему вы хотите повлиять на этот третий источник конкретно, хотя, когда вы можете повлиять на все sys.path
. Во всяком случае, три способа воздействия!--3--> (без перекомпиляции Python или исправления исходного кода):
- через переменную среды PYTHONPATH.
- создать
.pth
файлы и удаление их, где Python сканирует пакеты. (См. ссылку ранее для подробности.) -
программно, путем импорта
sys
а затем добавление или добавление кsys.path
import sys sys.path.insert(0, '/this/path/will/be/considered/first')
Надеюсь, один из этих трех способов должен помочь вам сделать то, что вы хотите.
в системе Mac OS X 10.7.5 у меня также была проблема, что Enthought python искал модули в /Library/Python/2.7/. По-видимому, это было вызвано файлом easy-install.pth находится в /Library/Python/2.7 / site-packages. После изменения расширения этого файла Enthought python импортировал модули Enthought (из / Library/Framework / Python.framework / версии/7.3/lib / python2.7 / сайт-пакеты).