python: в чем разница между pythonbrew и virtualenv?

Я новичок в python, и я планирую изучить django. У меня был небольшой опыт работы с ruby (не rails), и я знаком с РВМ однако я не понимаю разницы между pythonbrew и virtualenv. Я знаю pythonbrew является имитацией RVM но я думал virtualenv уже делает то, что RVM делает (или наоборот, что pythonbrew уже делает то,что делает RVM). Может кто-нибудь объяснить и, возможно, предоставить некоторые конкретные примеры/обычаи, чтобы помочь мне понять это. Большое спасибо!

5 ответов


Pythonbrew сродни Ruby's rvm: это функция оболочки, которая позволяет:

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

питоны, которые вы создаете, полностью изолированы друг от друга и от любой версии(ов) Python установлены общесистемный.

Virtualenv похож, но не совсем то же самое. Он создает виртуальную среду Python, которая концептуально находится поверх некоторой существующей установки Python (обычно общесистемной, но не всегда). По умолчанию на платформах Unix (и Mac) он создает символические ссылки на различные модули библиотеки Python, поэтому вы буквально делитесь этими модулями с "реальной" базовой реализацией Python. Но, virtualenv имеет свой собственный каталог" bin " и " site-packages" справочник. Все, что вы устанавливаете в виртуальной среде Python, доступно только в этой среде.

одним из преимуществ Pythonbrew является то, что среды Python, которые он создает, действительно и полностью автономны. Они не могут быть загрязнены ничем, что запутывается в базовой базовой установке Python, потому что нет базовой базовой установки. Это не относится к среде виртуального окружения. Если вы создаете virtualenv Python, а затем вы как-то вверните базовый экземпляр Python, который он сидит выше (например, случайно удалив часть каталога "сайта" базового Python при входе в систему как root), вы также испортите любую среду virtualenv на основе этого Python.

однако virtualenv имеет свои преимущества. Вероятно, самое большое преимущество заключается в том, что он легкий. Поскольку Pythonbrew компилирует Python с нуля, для создания одной из его сред создание среды Pythonbrew Python занимает некоторое время. Для сравнения, создание среда virtualenv Python очень быстрая.

вы можете, на самом деле, использовать их вместе. Вот одна ситуация, когда вы, возможно, захотите это сделать.

  • ваша базовая система использует Python 2.6.
  • вам необходимо установить Python 2.7.
  • по какой-либо причине вы не можете (или не хотите) установить Python 2.7 в масштабах всей системы, бок о бок с Python 2.6.

в таком случае вы можете использовать Pythonbrew для установки базового Python 2.7 в вашем домашнем каталоге, где он не конфликтует с установленным в другом месте. Затем вы можете создать одну или несколько облегченных сред virtualenv Python, основанных на Python, установленном Python 2.7. Например, вы можете использовать virtualenv для создания недолговечных тестовых сред для Python 2.7 таким образом.

Я сомневаюсь, что большинство людей действительно это делают. (Я не знаю.) Но нет причин, по которым ты не можешь.--3-->


для чего это стоит я никогда не слышал о PythonBrew раньше, но я знаю (и люблю) virtualenv.

Virtualenv используется для создания отдельных сред,на основе на python install у вас есть на вашем компьютере. То есть, если у меня есть python 2.7, я могу создать несколько изолированных сред python 2.7, но я не могу создать python2.6 окружающая среда.

по данным этой (который я нашел через google) Pythonbrew, похоже, сосредоточен на установке другие версии Python. Поэтому, я думаю, вы бы использовали 'brew для установки py2.6 и 2.7, а затем virtualenv для создания сред для каждого.

или, похоже, ' brew также может создавать среды, используя virtualenv.

почему другой интерпретатор Python на самом деле не является изолированной среде.

каждая установка python имеет набор пакетов (помещенных в "site-packages", я думаю). При установке нового пакета он добавляется в этот набор и доступен для всего вашего кода python.

Это может быть проблемой, если у вас есть один проект, который вы строите на Django0.96 и вы хотите начать новый проект с помощью Django1.3. Если вы просто обновите свою системную версию Django, это также повлияет на ваш старый проект.

с virtualenvs вы можете создать одну среду с Django1.3 и еще один с Django0.96, оба являются python2.7. Если вы были в порядке с запуском вашего старого проекта в python2.6 и новый в python2.7 вы могли бы сделать это слишком, но вот насчет следующих двух проектов с использованием версий diffenret с Django-багажник тогда?


Python brew предназначен для создания и установки, возможно, как некоторые buildbot. Я не настолько знаком. Virtualenv в основном для, Когда у вас есть другая версия python, или вы хотите попробовать какой-то пакет, не нарушая версию в системе.


хорошо, это что-то упивается

создание изолированных сред python (использует виртуальное окружение):

pythonbrew venv init
pythonbrew venv create proj
pythonbrew venv list
pythonbrew venv use proj
pythonbrew venv delete proj

от http://pypi.python.org/pypi/pythonbrew/


поскольку все ответы выше довольно старые, я хотел бы обобщить свои выводы здесь. Я пытался выяснить, как это работает с Python после выхода из rvm/ruby, и не мог найти четкого объяснения в интернете.

таким образом, у нас есть следующие варианты на Macos:

Homebrew (только для MacOS)

...Можно установить python и python3. Они будут храниться в подвале Homebrew и symlinked от /usr/local/bin. По умолчанию python установить с помощью brew на данный момент 2.7.6.

пакеты, установленные с помощью pip будет идти в местоположение по умолчанию (у вас также есть pip и pip3 symlinked также).

Pyenv (преемник Pythonbrew)

...является альтернативой Homebrew (на Macos) способ установки и обслуживания нескольких версий Python. Linux не имеет Homebrew, поэтому Pyenv - это своего рода специализированная версия для Python. Он также строит Python из исходного кода.

Pyenv держит установки Python в ~/.pyenv/versions/ и позволяет быстро переключаться между ними и использовать одинаковые имена для двоичных файлов (python, pip и т. д.). Он использует двоичные файлы "shim", которые являются поддельными двоичными файлами, такими как python, pip etc, которые имитируют Python и вместо этого просто молча перенаправляют выполнение на текущую активную версию.

пакеты, установленные с помощью pip войдет в активную установку Python.

таким образом, ни один из этих методов не достаточно, чтобы поддерживать отдельный python установки и наборы версий пакетов (например, rvm с gemsets) для каждого проекта. Таким образом:

Virtualenv

...ближе всего к rvm. Цитата этот пост:

он устанавливает чистую копию Python в новом каталоге путем копирования или связывания файлов из основной установки Python для создания новых каталогов bin и lib

поэтому он использует в настоящее время активная копия Питон и копирует его в отдельный каталог. virtualenvwrapper добавляет функциональность для управления этими средами и автоматической их активации с помощью cd как rvm делает.

это позволяет изолировать версию python и библиотеки, установленные для каждого проекта. Однако, он не устанавливает версий.

таким образом, звучит так, как большинство людей используют комбинацию pyenv + virtualenv или brew + virtualenv (brew является специфичным для Macos курс.) Первая часть используется для установки версий python (при необходимости), а вторая-для клонирования их для разных проектов и переключения между ними.

PS: Я только начинаю понимать это, пожалуйста, поправьте меня, если что-то здесь не так.

PPS: мне кажется, что весь этот бизнес можно улучшить, объединив pyenv и virtualenv под одной крышей...


"pythonbrew is a program to automate the building and installation 
 of Python in the users $HOME."

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