Я считаю, что ответ Майка Орра из списка рассылки virtual-env кажется лучшим. Обратите внимание, что ФП опубликовал этот вопрос в обоих местах.
Оригинальное содержание письма:
лет назад Debian создал / usr / local / lib / pythonVERSION / site-packages,
и скомпилировал двоичный файл Python, чтобы включить его в поиск по умолчанию
дорожка. Ubuntu последовал примеру Debian, как обычно. Питон
разработчикам не понравилось это, потому что вы получите вмешательство в
локально установленный / usr / local / bin / python с использованием тех же пакетов сайта
каталог. Ubuntu наконец-то решила отказаться от сайтов-пакетов и использовать
вместо этого dist-packages - имя, которое они придумали, чтобы оно не
мешать ни с чем. История где-то там, если
Вы гуглите это, где-нибудь в трекере ошибок Python или distutils SIG или
например.
Система работает, по крайней мере, если вы используете пакет Ubuntu virtualenv.
У некоторых людей были проблемы с использованием локально установленного virtualenv на
Ubuntu, потому что магические записи sys.path не были добавлены или
что-то. Я не уверен насчет --no-site-packages, потому что я никогда не использую
этот вариант: я запускаю PIL и mysqldb из пакетов Ubuntu, потому что это
иногда бывает сложно скомпилировать их C-зависимости. (Нужен
правые заголовочные файлы, Python игнорирует заголовочные файлы и т. д.)
Итак, пакеты Ubuntu Python входят в
/ USR / Lib / pythonVERSION / расстояние-пакеты. Или это поддержка 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-
пакеты / и более старые (из репозитория ubuntu / apt-get) в / usr / lib /
python2.6 / dist-packages, какой из них импортируется при импорте xyz?
Я предполагаю, что это основано на списке путей, да?
sys.path сканируется по порядку. Единственное, что забавно, что .pth яйца
получить раньше или позже на пути, чем некоторые люди ожидают. Но если
вы используете pip для всего, что он может сделать (т.е. кроме установки pip
сам, предварительно скомпилированные яйца и снимок локального каталога, который является
скопируйте, а не ссылку на яйцо), у вас все равно будет много .pth яиц.
- Какого черта это так запутанно? Есть ли что-то, что я
здесь не хватает?
Это не очень хорошо задокументировано. Я понял это, просмотрев сеть.
- Повлияет ли это и на пипс?
Да, pip автоматически установится в
/ USR / местные / Библиотека / pythonVERSION / сайт-пакеты. Используйте "pip install -E
$ VIRTUAL_ENV имя_пакета "для установки в virtualenv.