Я верю ответу Майка Орра из список рассылки virtual-env кажется лучшим. Обратите внимание, что ОП опубликовал этот вопрос в обоих местах.
Исходное содержание письма:
Несколько лет назад Debian создал /usr/local/lib/pythonVERSION/site-packages и скомпилировал двоичный файл Python, чтобы включить его в путь поиска по умолчанию. Ubuntu последовала примеру Debian, как обычно. Разработчикам Python это не понравилось, потому что вы могли столкнуться с вмешательством в локально установленный /usr/local/bin/python, использующий тот же каталог site-packages. В конце концов Ubuntu решила отказаться от site-packages и вместо этого использовать dist-packages, название, которое они придумали, чтобы оно ничему не мешало. Если вы погуглите, эта история где-то там есть, где-нибудь в системе отслеживания ошибок Python или в distutils SIG или где-то в этом роде.
Система работает, по крайней мере, если вы используете пакет Ubuntu virtualenv. У некоторых людей были проблемы с использованием локально установленного virtualenv в Ubuntu, потому что магические записи sys.path не добавлялись или что-то в этом роде. Я не уверен насчет --no-site-packages, потому что я никогда не использую эту опцию: я запускаю PIL и mysqldb из пакетов Ubuntu, потому что иногда бывает сложно скомпилировать их зависимости C. (Нужны правильные заголовочные файлы, Python игнорирует заголовочные файлы и т. д.)
Таким образом, пакеты Ubuntu Python помещаются в /usr/lib/pythonVERSION/dist-packages. Или этот каталог поддержки python по какой-то причине. Локально установленные пакеты Python по умолчанию помещаются в /usr/local/lib/pythonVERSION/dist-packages. Всякий раз, когда я устанавливаю систему Ubuntu 9.04, я запускаю:
$ sudo apt-get install python-setuptools (6.0c9) $ sudo apt-get install python-virtualenv (1.3.3) $ sudo easy_install pip $ sudo pip install virtualenvwrapper
Virtualenvs отлично работают таким образом, хотя я не пробовал --no-site-packages.
Я пытаюсь запустить virtualenv, и флаг --no-site-packages, похоже, ничего не делает с Ubuntu. Я установил virtualenv 1.3.3 с помощью easy_install (которую я обновил до setuptools 0.6c9)
Обе эти версии есть в Ubuntu 9.04, так что вы усложняете себе задачу, устанавливая их локально.
и вроде все установлено в /usr/local/lib/python2.6/dist-packages
да
Я предполагаю, что при установке пакета с помощью apt-get он помещается в /usr/lib/python2.6/dist-packages/?
да
- Это первый пришел первый служит на пути? Если у меня установлена более новая версия пакета XYZ в /usr/local/lib/python2.6/dist-packages/, а более старая (из репозиториев ubuntu/apt-get) в /usr/lib/python2.6/dist -packages, какой из них импортируется, когда я импортирую xyz? Я предполагаю, что это основано на списке путей, да?
sys.path сканируется по порядку. Единственная забавная вещь заключается в том, что яйца .pth помещаются в путь раньше или позже, чем некоторые ожидают. Но если вы используете pip для всего, что он может делать (например, кроме установки самого pip, предварительно скомпилированных яиц и моментального снимка локального каталога, который является копией, а не ссылкой на яйцо), у вас все равно не будет много яиц .pth. .
- Почему, черт возьми, это так запутанно? Есть ли что-то, что мне здесь не хватает?
Это плохо задокументировано. Я понял это, просмотрев веб-сайт.
- Повлияет ли это на пип?
Да, pip автоматически установится в /usr/local/lib/pythonVERSION/site-packages. Используйте «pip install -E $VIRTUAL_ENV packagename» для установки в виртуальную среду.
person
Jorge Vargas
schedule
13.10.2009
PYTHONPATH
. [См. здесь][1] [1]: stackoverflow.com/questions/19210964/ - person hahakubile   schedule 27.03.2014