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

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

  1. каталог, содержащий входной скрипт (или текущий каталог)
  2. PYTHONPATH
  3. установки-зависимый по умолчанию

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

хотя я был бы заинтересован в общем решении, мои конкретные вопросы:

  • Я установил восторженное распределение 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 или исправления исходного кода):

  1. через переменную среды PYTHONPATH.
  2. создать .pth файлы и удаление их, где Python сканирует пакеты. (См. ссылку ранее для подробности.)
  3. программно, путем импорта 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 / сайт-пакеты).