Как определяется путь поиска модуля 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.pathimport 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 / сайт-пакеты).