Когда я запускаю
import sys
print sys.path
на моем Mac (Mac OS X 10.6.5, Python 2.6.1), я получаю следующие результаты.
/Library/Python/2.6/site-packages/ply-3.3-py2.6.egg
...
/Library/Python/2.6/site-packages/ipython-0.10.1-py2.6.egg
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload
/Library/Python/2.6/site-packages
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode
Они сгруппированына 5 категорий.
- / Библиотека / Python / 2.6 / site-пакеты / *. egg
- / Библиотека / Python / 2.6 / site-packages
- Каркасы/Python.framework/Versions/2.6/lib/python2.6
- Frameworks / Python.framework / Versions / 2.6 / Extras / lib / python
- PATH из переменной среды PYTHONPATH.
И я могу добавить больше путей, используя код
sys.path.insert(0, MORE_PATH)
- Какие подпрограммы устанавливают эти пути и когда?
- Являются ли некоторые пути построеныв исходном коде Python?
- Возможно ли, что пути, вставленные с 'sys.path.insert' игнорируются?Мне любопытно, так как с mod_wsgi я обнаружил, что пути не найдены с помощью 'sys.path.insert'.Я попросил другой пост на этот вопрос.
ДОБАВЛЕНО
На основании ответа Майкла я посмотрел на site.py и получил следующий код.
def addsitepackages(known_paths):
"""Add site-packages (and possibly site-python) to sys.path"""
sitedirs = []
seen = []
for prefix in PREFIXES:
if not prefix or prefix in seen:
continue
seen.append(prefix)
if sys.platform in ('os2emx', 'riscos'):
sitedirs.append(os.path.join(prefix, "Lib", "site-packages"))
elif sys.platform == 'darwin' and prefix == sys.prefix:
sitedirs.append(os.path.join("/Library/Python", sys.version[:3], "site-packages"))
Я также считаю, что имя директории с site.py (/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6 для моего Mac) должно быть встроено в Pythonисходный код.