
Содержание статьи
Приложение в январе 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 использовать в порядке приоритета:
- The
PYENV_VERSION
переменная среды (если указано). Вы можете использоватьpyenv shell
команду, чтобы установить эту переменную среду в вашем текущем сеансе оболочки. - Специфическое применение
.python-version
файл в текущем каталоге (если есть). Вы можете изменить текущий каталог.python-version
файл сpyenv local
команда. - Первый
.python-version
файл найден (если есть) путем поиска в каждом родительском каталоге, пока не дойдет до корня вашей файловой системы. - Файл глобальной версии. Вы можете изменить этот файл с помощью
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 или необходимых зависимостей. Мы также знаем, как документировать инструкции по настройке, чтобы другие могли использовать для любого проекта, над которым мы работаем.
Мы также видим причину использования набора, поскольку не всем разработчикам нужны все три.
Надеюсь, это было полезно и является полезной ссылкой в сочетании с нижеследующей документацией.
Спасибо, что прочли! ?