Полное руководство по настройке 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 с помощью плагина.