Ubuntu + virtualenv = беспорядок? virtualenv ненавидит dist-пакеты, хочет сайты-пакеты

Может кто-нибудь, пожалуйста, объясните мне, что происходит с python в ubuntu 9.04?

Я пытаюсь развернуть virtualenv , и флаг --no-site-packages похоже, ничего не делает с ubuntu. Я установил virtualenv 1.3.3 с easy_install (который я обновил до setuptools 0.6c9 ), и все, кажется, установлено в /usr/local/lib/python2.6/dist-packages

Я предполагаю, что при установке пакета с помощью apt-get он помещается в /usr/lib/python2.6/dist-packages/ ?

Проблема в том, что есть /usr/local/lib/python2.6/site-packages что просто сидит там, где пусто. Казалось бы (взглянув на path в virtualenv ), что это папка virtualenv используется как резервная копия. Таким образом, даже я думал, что опускаю – не --no-site-packages , я не могу получить доступ к своим локальным системным пакетам из любого из моих виртуальных пользователей.

Поэтому мои вопросы:

  1. Как мне получить virtualenv чтобы указать на один из dist-packages ?
  2. На какие dist-пакеты я должен указать? /usr/lib/python2.6/dist-packages или /usr/local/lib/python2.6/dist-packages/
  3. В чем смысл /usr/lib/python2.6/site-packages ? Там ничего нет!
  4. Сначала это на первом месте? Если у меня есть новая версия пакета XYZ, установленная в /usr/local/lib/python2.6/dist-packages/ а также более старая (из ubuntu repos / apt-get) в /usr/lib/python2.6/dist-packages , которые импортируются, когда я import xyz ? Я предполагаю, что это основано на списке путей, да?
  5. Почему, черт возьми, это так запутанно? Здесь что-то не хватает?
  6. Где определяется, что easy_install должен установить на /usr/local/lib/python2.6/dist-packages ?
  7. Будет ли это влиять на pip ?

Спасибо всем, кто может это прояснить!

5 Solutions collect form web for “Ubuntu + virtualenv = беспорядок? virtualenv ненавидит dist-пакеты, хочет сайты-пакеты”

У меня возникнет соблазн взломать его, сделав сайт-пакеты ссылкой на dist-пакеты, но я думаю, это может повлиять на другие случаи, когда вы хотите установить какое-то расширение, отличное от ubuntu dist. Я не могу придумать другого ответа на 1, кроме настройки виртуальных источников (поскольку оба ubuntu и virtualenv были настолько популярны, я не удивлюсь, если найду измененные версии уже существуют).

Re 2, если вы используете / usr / local / bin / python, вы должны использовать / usr / local версию lib (включая пакеты сайта) и, наоборот, если вы используете / usr / bin / python.

Re 3, там будет что-то, если вы когда-либо устанавливаете расширение для / usr / bin / python из источников (не через easy_install или из дистрибутива ubuntu).

Re 4, да, предыдущие записи на пути имеют приоритет.

Re 5, easy_install легко только от его имени – он делает так много темной магии, что он был тщательно сохранен из стандартной библиотеки python, несмотря на его удобство, потому что консенсус среди нас, коммандеров python, заключается в том, что глубокая темная магия для удобства «легкая», только на поверхности.

Re 6, я думаю, что это модификация ubuntu для easy_install – если это правильно, тогда оно определяется везде, где канонические или другие сторонники ubuntu принимают свои коллективные решения.

Re 7, извините, не знаю. У меня нет разумного недавнего ubuntu под рукой, чтобы проверить.

Я считаю, что ответ Майка Орра из списка рассылки virtual-env кажется лучшим. Обратите внимание, что OP опубликовал этот вопрос в обоих местах.

Исходное содержание письма:

Несколько лет назад Debian создал / usr / local / lib / pythonVERSION / site-packages и скомпилировал двоичный код Python, чтобы включить его в путь поиска по умолчанию. Ubuntu следовал примеру Debian, как обычно. Разработчикам Python это не понравилось, потому что вы столкнулись с помехами локально установленного / usr / local / bin / python, используя тот же каталог сайтов-пакетов. Ubuntu, наконец, решила отказаться от пакетов сайтов и вместо этого использовать dist-пакеты, имя, которое они изобрели, чтобы оно ничем не мешало. Рассказ о развязке где-то там, если вы его рекламируете, где-нибудь в Python-трекер или distutils SIG или такой.

Система работает, по крайней мере, если вы используете виртуальный пакет Ubuntu. У некоторых людей были проблемы с использованием локально установленного virtualenv на Ubuntu, потому что магические записи sys.path не добавлялись или что-то еще. Я не уверен в -no-site-пакетах, потому что я никогда не использую этот параметр: я запускаю PIL и mysqldb из пакетов Ubuntu, потому что иногда бывает сложно скомпилировать их зависимости C. (Нужны правильные файлы заголовков, Python игнорирует файлы заголовков и т. Д.)

Поэтому пакеты Ubuntu Python входят в / usr / lib / pythonVERSION / dist-пакеты. Или почему-то этот каталог поддержки python. Локально установленные пакеты Python по умолчанию попадают в / usr / local / lib / pythonVERSION / dist-пакеты. Всякий раз, когда я устанавливаю систему 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

В этом случае виртуальные рабочие отлично работают, хотя я не пробовал – не-сайт-пакеты.

Я пытаюсь развернуть 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 /?

да

  1. Сначала это на первом месте? Если у меня есть более новая версия пакета XYZ, установленная в /usr/local/lib/python2.6/dist- packages / и более старой (из ubuntu repos / apt-get) в / usr / lib / python2.6 / dist -пакеты, которые импортируются, когда я импортирую xyz? Я предполагаю, что это основано на списке путей, да?

sys.path сканируется по порядку. Самое смешное, что .pth яйца получают раньше или позже на пути, чем ожидают некоторые люди. Но если вы используете пипс для всего, что он может сделать (т. Е. Кроме того, чтобы установить сам pip, предварительно скомпилированные яйца и снимок локального каталога, который является копией, а не ссылкой на яйцо), вы не будете иметь много яиц .pth в любом случае ,

  1. Почему, черт возьми, это так запутанно? Здесь что-то не хватает?

Это плохо документировано. Я понял это, просмотрев веб-страницы.

  1. Будет ли это влиять на пип?

Да, pip автоматически установит в / usr / local / lib / pythonVERSION / site-packages. Используйте «pip install -E $ VIRTUAL_ENV packagename» для установки в virtualenv.

Вам действительно не следует прикасаться к установке Python Ubuntu, если вы не создаете системные административные инструменты или не создаете что-то, что можно считать новым системным сервисом.

Если вы используете Ubuntu для разработки или развертывания приложений Python, всегда создавайте свой собственный Python из источника, загружайте его и используйте для развертывания. Таким образом, у вас будут все каталоги в нужном месте, и virtualenv будет работать нормально. Если вы развернете несколько приложений Python на сервере, сделайте свой Python в каком-то месте, например /home/python или /opt/python или где-нибудь вне вашего домашнего каталога. Убедитесь, что у вас есть права на запись для группы разработчиков ( users ?), Чтобы люди могли легко добавлять пакеты.

Это также позволяет вам иметь два яруса пакетов. Те, которые являются вашими собственными стандартными инструментами, могут быть установлены в вашем дистрибутиве Python и быть частью tarball, который вы развертываете, и только приложения-конкретные пакеты будут в virtualenv.

Не обновляйте и не модифицируйте установленную системой Ubuntu Python.

Ну, у меня есть Ubuntu 9.04, и я быстро попытался создать пару песочниц с пакетами сайтов и один без него. И все работает нормально.

Единственное отличие в подходе, которое я взял, это использовать пакет python-virtualenv Ubuntu (1.3.3). И предположим, что он настроен командой Ubuntu в соответствии с настройками Ubuntu.

Чтобы подвести итог disable easy_installed virtualenv на некоторое время, используйте пакетный python-virtualenv и посмотрите, соответствует ли это вашим ожиданиям.

Фактически мы используем аналогичную установку для производства без каких-либо проблем. На отдых уже ответил Алекс.

Другой способ исправить это:
https://stackoverflow.com/a/17265840/202168

Не забудьте сделать это в каждом виртуальном пространстве, где вам это нужно, но не полагается на хаки или специальную версию virtualenv

  • Virtualenv на Ubuntu без пакетов сайтов
  • Использование PIP в виртуальной среде, как установить MySQL-python
  • Как позволить другим запускать вашу программу Python без установки Python
  • Установить virtualenv для python в textmate 2
  • Установите два модуля python с тем же именем
  • Как создать виртуальный env с помощью python3
  • Как использовать Python virtualenv
  • Установить pycairo в virtualenv
  • Установка Tensorflow с использованием инструкций SSE с пипсом
  • Проблемы с использованием носа в virtualenv
  • PyCharm не может найти пакеты в virtualenv
  • Python - лучший язык программирования в мире.