Как управлять несколькими версиями Python и виртуальными средами

kak upravlyat neskolkimi versiyami python i virtualnymi sredami

Приложение в январе 2019 года: если вы возвращаетесь к этому блогу после обновления в macOS Mojave, просмотрите эту проблему github для решения распространенной проблемы pyenv «zlib недоступен».

Прежде чем мы начнем, давайте кратко рассмотрим термины, используемые в названии:

  • Несколько версий Python: Различные установки Python на одной машине, например, 2.7 и 3.4.
  • Виртуальные среды: изолированные независимые среды, которые могут иметь как конкретную версию Python, так и любые специфические для проекта пакеты, установленные в них, не влияя на другие проекты.

Здесь мы рассмотрим три разных инструмента для работы с ними и когда каждый из них может понадобиться. Давайте рассмотрим варианты использования:

  • venv / pyvenv
  • pyenv
  • pyenv-virtualenv

Если вы используете a единственная версия версии Python 3,3+и хочу управлять различные виртуальные среды, потом venv это все, что вам нужно.

Если вы хотите использовать несколько версий Python на 3,3+, с виртуальной средой или без неезатем продолжайте читать о pyenv.

Если вы также хотите работать с Python 2потом pyenv-virtualenv является инструментом для разбирательства.

venv

С Python 3.3+ venv пакет включен. Он идеально подходит для создания лёгких виртуальных сред.

Вплоть до Python 3.6 вызвал скрипт pyvenv был также включен как обертка вокруг venv, но это устарело. Он будет полностью удален в Python 3.8. Точно такая же функция доступна при использовании venv, и любую имеющуюся документацию следует обновить. Для всех заинтересованных вы можете ознакомиться с причинами обесценивания pyvenv.

venv используется для создания новой среды с помощью команды терминала:

$ python3 -m venv directory-name-to-create

активирован с помощью:

$ source name-given/bin/activate

и деактивируется просто:

$ deactivate

Если необходимо полностью удалить среду после ее деактивации, вы можете запустить:

$ rm -r name-given

По умолчанию создаваемой ею средой будет текущая версия Python, которую вы используете. Если вы пишете документацию и хотите обеспечить дополнительную безопасность, что правильная версия Python используется вашим читателем, вы можете указать основную и дополнительную версию в команде, например:

$ python3.6 -m venv example-three-six

Если считыватель использует версию от 3.6, команда не будет успешной и будет указана в сообщении об ошибке. Однако любая версия патча (например, 3.6.4) будет работать.

Когда среда активна, любые пакеты можно установить через него. pip как нормально. По умолчанию, как только созданная среда будет нет включить все пакеты, уже установленные на машине. Как pip сам по себе не обязательно будет установлен на машине. Рекомендуется сначала обновить pip до последней версии, используя pip install --upgrade pip.

Проекты обычно имеют a requirements.txt файл с указанием его зависимостей. Это позволяет использовать команду быстрого доступа pip install -r requirements.txt команда для быстрой установки всех пакетов в только что созданную виртуальную среду. Они будут существовать только в виртуальной среде. Он не будет доступен, когда он деактивирован, но останется, когда его снова активировать.

Если вам не нужно использовать дополнительные версии Python, то это все, что вам нужно, чтобы создать изолированные, специфические для проекта, виртуальные среды.

pyenv

Если вы хотите использовать несколько версий Python на одной машине, то pyenv часто используется инструмент для установки и переключения между версиями. Это не следует путать с ранее упомянутым амортизированным pyvenv сценарий. Он не поставляется в комплекте с Python и должен быть установлен отдельно.

The pyenv документация содержит замечательное описание того, как она работает, поэтому мы просто рассмотрим, как ее использовать.

Сначала нам нужно его установить. Если используется Mac OS X, мы можем сделать это с помощью Homebrew, в противном случае рассмотрим другие варианты установки.

$ brew update
$ brew install pyenv

Далее добавьте следующее в нижней части ваших сценариев оболочки, чтобы разрешить pyenv чтобы автоматически изменять версии для вас:

eval "$(pyenv init -)"

Для этого откройте используемый сценарий оболочки через $ ~/.zshrc, $ ~/.bashrc или $ ~/.bash_profile и скопируйте и вставьте указанную выше строку.

Бег pyenv versions покажет, какие версии Python на данный момент установлены, с помощью a * наряду с тем, что используется сейчас. pyenv version показывает это напрямую, и python --version можно использовать для проверки этого.

Чтобы установить дополнительную версию, скажем 3.4.0просто используйте pyenv install 3.4.0.

pyenv ищет в четырех местах, чтобы решить, какую версию Python использовать в порядке приоритета:

  1. The PYENV_VERSION переменная среды (если указано). Вы можете использовать pyenv shell команду, чтобы установить эту переменную среду в вашем текущем сеансе оболочки.
  2. Специфическое применение .python-version файл в текущем каталоге (если есть). Вы можете изменить текущий каталог .python-version файл с pyenv local команда.
  3. Первый .python-version файл найден (если есть) путем поиска в каждом родительском каталоге, пока не дойдет до корня вашей файловой системы.
  4. Файл глобальной версии. Вы можете изменить этот файл с помощью pyenv global команда. Если файл глобальной версии отсутствует, pyenv предполагает, что вы хотите использовать «системный» Python. (Другими словами, любая версия работала бы, если бы pyenv не было в вашем PATH.)

При настройке нового проекта, который должен использовать Python 3.6.4, тогда pyenv local 3.6.4 будет запущен в его корневом каталоге. Это позволит как установить версию, так и создать файл .python-version файл, чтобы машины других корреспондентов забрали его.

Полное описание pyenv команда является одной для закладки.

pyenv и venv

Работая с Python 3.3+, теперь мы знаем, как устанавливать и переключаться между различными версиями Python, а также как создавать новые виртуальные среды.

Как пример, скажем, что мы создавали проект, который должен был использовать Python 3.4.

Сначала мы можем установить нашу локальную версию с помощью pyenv local 3.4.0.

Если бы мы тогда побежали python3 -m venv example-project новая виртуальная среда будет создана под example-projectиспользуя наш локально включенный Python 3.4.0.

Активируем с помощью source example-project/bin/activate и можно начать работать.

Дальше мы могли бы по желанию документ, который должен использовать сотрудник python3.4 -m venv <name>. Это означает, что даже если соавтор не использовал pyenv python3.4 команда будет ошибаться, если их версия Python не была такой же основной и второй версией (3 и 4), как мы планировали.

Кроме того, мы можем просто указать, что должно использоваться 3.4.0, и дать инструкции python3 -m venv <name>. Если мы верим, что любое веrsion gReater, чем 3.4, приемлем, тогда мы также можем использовать python3 закончено python3.4, как соавтор использовал 3.6, иначе он также получит ошибку. Это решение конкретного проекта.

pyenv-virtualenv

pyenv можно использовать для установки как Python 2, так и 3 версии. Однако, как мы видели, venv ограничено версиями Python выше 3.3.

pyenv-virtualenv это инструмент для создания виртуальных сред, интегрированный с pyenvи работает для всех версий Python. Все равно рекомендуется использовать официальный Python venv где это может быть. Но если, например, вы создаете виртуальную среду на основе 2.7.13это комплименты pyenv.

Он также хорошо работает с Anaconda и Miniconda conda среды, если вы уже используете их. Инструмент под названием virtualenv тоже существует. Здесь он не рассмотрен, но ссылка на него приведена в конце.

После установки pyenv далее его можно установить с помощью Homebrew (или альтернатив) так:

$ brew install pyenv-virtualenv

Дальше в вашем .zshrc, .bashrcили .bash_profile (в зависимости от того, какую оболочку вы используете) добавьте следующее внизу:

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Это позволяет pyenv для автоматической активации и деактивации среды при перемещении каталогов.

Чтобы создать новую виртуальную среду, используйте:

$ pyenv virtualenv <version> <name-to-give-it>

// for example

$ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10

Существующие среды можно перечислить с помощью:

$ pyenv virtualenvs

Активируется/деактивируется с помощью:

$ pyenv activate <name>
$ pyenv deactivate

На момент написания, во время использования activate предупреждение prompt changing will be removed from future release будет отображаться. Это ожидаемое и относится только к (env-name) отображение в вашей оболочке, а не использование activate самая команда.

Установка требований работает, как описано в venv. В отличие от в venv а rm -r команда не нужна для удаления среды, an uninstall команда существует.

Последние мнения

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

Мы также видим причину использования набора, поскольку не всем разработчикам нужны все три.

Надеюсь, это было полезно и является полезной ссылкой в ​​сочетании с нижеследующей документацией.

Спасибо, что прочли! ?

Другие вещи, которые я исследовал:

Ресурсы

Добавить комментарий

Ваш адрес email не будет опубликован.