Ответ 1
Недавно у меня были некоторые проблемы с 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, она добавит больше собственных конфигураций. Поэтому вам нужно быть осторожным.