Устранение неполадок в python sys.path - PullRequest
13 голосов
/ 31 марта 2011

Документы Python по http://docs.python.org/library/sys.html говорят, что sys.path - это ...

Инициализируется из переменной среды PYTHONPATH, плюс зависящее от установки значение по умолчанию.

Я нашел элемент пути в моем sys.path, который вызывал проблемы, и у меня было много проблем с его поиском.Все, что я мог найти в Google, - это люди, объясняющие, как добавить элементы в переменную PYTHONPATH.

Мой вопрос: есть ли инструменты, которые могут помочь отследить , почему какой конкретный предмет у вас на sys.path?Как я могу узнать больше об «установке по умолчанию»?

Пока что я нашел частичный ответ - использовать strace на самом Python и искать .pth файлы.Я также нашел sys.path_importer_cache, который может или не может быть применим.

1 Ответ

5 голосов
/ 31 марта 2011

Недавно у меня были некоторые проблемы с sys.path, и вот как я пытался выяснить, откуда поступают записи. Я был в состоянии отследить все записи и откуда они пришли. Надеюсь, это вам тоже поможет.

  • Первое, что добавляется C:\WINNT\system32\python27.zip (подробнее в PEP273).

  • Следующие, которые добавляются из записей в реестре Windows. Записи C:\Python27\DLLs;C:\Python27\lib; C:\Python27\lib\plat-win; C:\Python27\lib\lib-tk взяты из HOT_KEY_LOCAL_USER/Python/PythonCore/2.7/PythonPath в реестре. Больше подробностей в комментариях к исходному коду Python здесь http://svn.python.org/projects/python/trunk/PC/getpathp.c (Эти записи мне было непросто понять, пока я не нашел ссылку выше).

  • Далее, как объяснено в документации к пакету site ( ссылка ), sys.path строится из sys.prefix и sys.exec_prefix. На моем компьютере они оба указывают на C:\Python27. И по умолчанию он ищет lib/site-packages в любом случае. Итак, теперь записи C:\Python27; C:\Python27\lib\site-packages добавлены в список выше.

  • Затем выполняется поиск каждого из файлов .pth в алфавитном порядке. У меня есть easy_install.pth, pywin32.pth и setuptools.pth в моих пакетах сайта. Здесь вещи начинают становиться странными. Было бы просто, если бы записи в .pth файлах были просто каталогами. Они просто добавляются к sys.path построчно. Однако easy_install.pth имеет некоторый код Python, который заставляет записи, перечисленные в easy_install.pth, добавлять список пакетов в начало списка sys.path.

  • После этого записи каталога в pywin32.pth, setuptools.pth добавляются в конец списка sys.path, как и ожидалось.

Примечание. Хотя приведенное выше обсуждение относится к Windows, оно аналогично даже для Mac и т. Д. На Mac он просто добавляет различные значения по умолчанию для ОС, такие как darwin и т. Д., Прежде чем начинает искать каталог site-packages для файлов .pth.

В вашем случае вы можете начать с запуска оболочки Python и проверить, куда sys.prefix и sys.exec_prefix указывают, а затем развернуть оттуда.

Примечание 2. Если вы используете IDE, такую ​​как Aptana / PyDev, он добавит больше своих собственных конфигураций. Таким образом, вы должны быть осторожны с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...