Полное руководство по настройке pyenv
Мы пытались установить Python, используя собственную среду, контейнеры Docker, venv
и pyenv
. Мы решили использовать pyenv
и virtualenv.
. Я расскажу вам, почему pyenv
лучше всего подходит для некоторых конфигураций в нашей среде.
pyenv — это инструмент для управления различными версиями виртуального Python.
Я узнал о pyenv
, когда один из сотрудников DevOps рассказал мне об этом. Мы исследовали и протестировали несколько подходов к управлению версиями Python для наших необлачных программных продуктов. Мы решили использовать pyenv
.
pyenv
Версия 2.7.1 была выпущена в начале декабря 2022 г. и представляет собой постоянно поддерживаемый инструмент Python. pyenv
имеет расширяемую архитектуру, где новый подключаемый модуль добавляет новые функции и полностью построен из кода оболочки Unix/Linux.
Например, pyenv-virtualenv, плагин для virtualenv
, последней версии два месяца.
Нам нравится это архитектурное решение, поскольку оно позволяет загружать зрелые функции плагинов, в то время как проблемные плагины не загружаются. Кроме того, вы можете настроить pyenv
с помощью пользовательских подключаемых модулей, которые добавляют определенные функции, необходимые вашей организации.
Для нашего решения pyenv
мы частично следовали следующему руководству:
Мы сделали исключения из описанного выше процесса, поскольку некоторые pyenv
команды не работали на некоторых наших вычислительных платформах.
Примечание. Вероятно, мы могли бы заставить работать некоторые из pyenv
неработающих команд, но они нам не понадобились. Нам нужен был инструмент для запуска новой версии Python для новой виртуальной среды для системных инженеров и тестировщиков. Организация считала, что инженерному персоналу не нужно больше управлять жизненным циклом виртуальных сред, чем создавать базовую машину.
Примечание. Любой инженер мог свободно изучить и попробовать это на своих машинах.
Я показываю только шаги, которые сработали для меня на macOS. Процедуры установки различались в Ubuntu, и я готов поспорить, что процедуры отличаются больше для версий WinOS.
Большинство из нас используют macOS Monteray (12.6) и устанавливают Homebrew на macOS 10.4+. Мы используем Home[ brew
] и curl
в качестве инструментов установки для pyenv
.
Создайте ярлык для каждой версии Python, которую вы хотите использовать.
Наша локальная среда для корпоративной разработки состоит из macOS и ОС Ubuntu Linux, обе эти ОС имеют генетические корни в Unix.
У нас есть сочетание приложений в облаке и изолированной локальной сети. Локальные серверы производства предприятия — это локальные серверы ОС Ubuntu Linux. Облачное решение — это Kubernetes и Docker для облачных платформ Azure (облако Microsoft), AWS (облако Amazon) и GCS (облако Google).
Мы используем докер-контейнеры для Kubernetes. Наше докер-решение обсуждается в этой статье.
Шаг 1: Установка Homebrew для pyenv
Home[ brew
] — это инструмент, который мы используем как внутри, так и за пределами экологии питонов.
Необязательно: если у вас не установлен Homebrew. Ниже показано, как мы его устанавливаем.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Вот как результат выглядел на моем MacPro:
На этом этапе установки, в зависимости от того, как вы настроили безопасность GitHub, то есть, если вы использовали ключ, он может запросить у вас пароль для платформы Mac. Воздержитесь от ввода пароля GitHub или пароля Apple ID.
Примечание. Уже более года Github требует установки локального ключа.
Шаг 2: Установка зависимостей pyenv
Примечание: если расширения еще не установлены, вас могут спросить, хотите ли вы установить их в эти двоичные файлы расширений Apple xtools.
brew install openssl readline sqlite3 xz zlib
Шаг 3: Установка pyenv
На этом этапе вы можете установить pyenv
с brew.
Вы можете, но не делайте этого. Home[ brew
] установит только pyenv
но не плагины.
Вместо этого используйте curl
для установки базы pyenv
и плагинов в оболочку командной строки:
$ curl https://pyenv.run | bash
Примечание. Вы можете заменить bash
на zsh
, и pyenv
отлично работает в оболочке zsh
.
Чтобы проверить успешность установки pyenv
, запустите
$pyenv
Упс! Мы должны были инициализировать pyenv
для любого входа в систему. Мы покажем вам, как в разделе 5.
Шаг 4A: Обновление pyenv
Вы можете обновить pyenv
с помощью:
$pyenv update
Шаг 4B: Удаление инициализации pyenv
Помните, я утверждал, что pyenv
был написан в шелл-коде, а не на каком-то компьютерном языке, который у вас может быть, а может и не быть. Вы будете использовать команды оболочки, а не простой <cmd> pyenv — init
.
Возможно, в какой-то момент вы захотите начать все сначала с версиями Python, загруженными в pyenv.
. Вы можете удалить (удалить) pyenv
файлы инициализации с помощью:
$cd $HOME # go to $ home $rm -rf .pyenv # remove install
Не питонический, но эффективный.
Примечание:
pyenv install|uninstall
не устанавливает|удаляетpyenv.
Вместо этого требуется аргумент, представляющий собой версию Python, которую вы хотите загрузить вpyenv
.
Шаг 4C: Удаление pyenv
Это прямо задокументировано здесь.
1. Чтобы полностью удалить Pyenv, удалите его корневой каталог. Это удалит все версии Python, которые были установлены в каталоге
$(pyenv root)/versions/
:
$rm -rf $(pyenv root)
2. Выполните шаг 4B. pyenv
требуется дополнительная работа, чтобы стать в целом готовым к корпоративному использованию (пуленепробиваемым). Тем не менее, это было улучшение по сравнению с тем, что было раньше.
Шаг 5: Инициализация pyenv
Мы хотели, чтобы общесистемный файл инициализации выполнялся для входа любого пользователя.
Мы написали сценарий оболочки bash. Сценарий оболочки работает в bash
или zsh
и состоит из трех команд:
export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
Шаг 6: Какая версия системы pyenv для Python?
Следует признать, что versions
команда для pyenv
путается с $<cmd> --version
, командой, с которой многие из вас знакомы. Однако команда pyenv versions
перечисляет версии Pythonдоступныедля загрузки и управления с помощью pyenv
.
$pyenv versions output==> system
У вас может быть установлено несколько версий Python. Перед установкой (загрузкой) версий Python по умолчанию используется версия Python python
.
Примечание:
pvenv
нужен символpython
. Многие из вас определилиpython3
для версий python 3.x иpython2
или версий python 2.x. Игнорируя разработчиков Python 2.x,cp python3 python.
теперь вы можете загрузить версию Python 2.x вpyenv,
, как описано в Разделах 7 и 8.
Шаг 7: Перечислите все версии Python для загрузки в pyenv.
Если вы хотите увидеть примерно 300 различных версий Python для загрузки в pyenv
, выполните следующее:
Я нахожу вывод вышеуказанной команды подавляющим. Вместо этого я использую такие команды, как:
pyenv install --list | grep " 3\.[1-9]" # list all vanilla versions of python
or
pyenv install --list | grep " 3\.[8]" # list all 3.8 sub-sub versions of python
or
pyenv install --list | grep "anaconda" # list all anaconda versions
or
pyenv install --list | grep "jyhon" # list all jyhon versions of python
Шаг 8: Установка версий Python
Вы можете установить любую версию Python, указанную pyenv install -- list.
$pyenv install 3.10.1
$pyenv install 3.11.1
$pyenv versions
Шаг 9: Выбор из нескольких версий Python, загруженных в Python
Вместо того, чтобы зацикливаться на одной версии Python, вы можете переключиться на любую версию Python, используя pyenv global <name>.
Так просто.
Выводы и резюме
Инструмент Python с открытым исходным кодом, за некоторыми исключениями, предназначен для разработчиков, а не для пользователей. Экология python яркая: тысячи пакетов с открытым исходным кодом с нулевыми звездами до сотен тысяч звезд только на Github.
Разработчикам нужны разные всеобъемлющие среды для пробной загрузки нового пакета с открытым исходным кодом, который они могут захотеть сохранить или сбросить.
Тест использует установленные всеобъемлющие среды, называемые виртуальными средами, для запуска модульных тестов, создания и запуска интеграции компонентов, стресс-тестов и тестов приложений.
Кроме того, Test может улучшить время отклика конечного пользователя, заменив его на более быстрый Python, например версию pypy.
pvenv
упрощает замену любой версии Python до или после создания виртуальной среды.
pvenv
— это один из двух инструментов, которые мы используем для управления жизненным циклом виртуальных сред.
В моем следующем посте будет обсуждаться второй инструмент, который мы используем: virtualenv.
Также в моем следующем посте будет обсуждаться, как pvenv
поддерживает virtualenv
с помощью плагина.