Рубрики
Без рубрики

Вы можете легко и разумно запускать несколько версий Python с Pyenv

Python 3.9 Просто вышло недавно, и я подумал, что это имеет смысл проверить некоторые из новых … Tagged с Python.

Python 3.9 Только недавно вышел, и я подумал, что это имеет смысл проверить некоторые из новых функций ( Операторы профсоюза Dict , Строка удалить префикс и суффикс , и т.д.). Конечно, для этого требуется среда Python 3.9. Поскольку новые версии Python могут сломать существующий код, я не хочу обновлять всю свою систему, чтобы попробовать новую функцию, скорее, я хотел бы иметь возможность контролировать, какую версию Python I использую, в идеале сохраняющую более старые версии по мере необходимости Отказ Есть много способов поддерживать среды Python, но один очень полезный инструмент – PENV.

От PENV DOCS Мы узнаем, что Pyenv – это набор функций чистых оболочков, которые позволяют вам изменять свою глобальную версию Python в соответствии с каждой пользовательской базой, имеют версии Python Phython, или переопределяют версию Python, используемую с переменной среды. Поскольку pyenv зависит от оболочки, он поддерживается только на Mac/Linux (или Windows, используя WSL). В этом посте я прогулюсь через процесс установки и несколько распространенных сценариев использования.

Прежде чем мы сделаем это, важно отметить, что Pyenv не обрабатывает создание и техническое обслуживание VirtualenV (но вы можете использовать Pyenv-Virtualenv Плагин для этого) или просто используйте сам VirtualenV. Я буду планировать охватывать эти детали в будущем посте.

Если вы используете Mac, рассмотрите возможность использования Домашний вид установить PENV. С помощью этого метода вам нужен только еще один шаг, чтобы закончить установку (перейти к шагу # 3 ниже)

brew update
brew install pyenv

Шаг 1

В качестве альтернативы вы можете установить с помощью Git. Рекомендуется просто разместить это в $ Home \. Pyenv , но он может быть установлен где угодно.

 git clone https://github.com/pyenv/pyenv.git ~/.pyenv

Шаг 2

В этот момент в GIT установите, вам нужно добавить две переменные в вашу среду. Pyenv_root должен указывать на корню установки, а ваш Путь нужно включить $ Pyenv_root/bin впереди. Проверьте Документы Для разных снарядов, но вот что вам нужно сделать для ZSH, текущей оболочкой по умолчанию Mac по состоянию на 10.15 Catalina.

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc

Теперь, если вы устанавливаете с людьми или установкой GIT, вам нужно добавить PENV INIT - к вашей среде. Это шаг № 3 и требуется для обоих типов установки (этот пример для ZSH, проверьте документы для других оболочек).

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc

На данный момент вам нужно будет перезапустить свою оболочку. Если вы никогда не построили Python с нуля, вам нужно будет установить зависимости сборки Python Build. Это действительно Всего несколько простых команд И как только вы сделаете это, вы должны быть в состоянии создать любую версию Python. Вы захотите убедиться, что ваши зависимости в курсе, потому что в противном случае вы можете построить версию Python, которая даст вам странные ошибки при запуске, или это может не построить вообще.

Хорошо, теперь, когда установка закончилась, вы должны быть в состоянии запустить пинв (или pyenv -h ) в вашей оболочке и посмотрите список помощи на использовании.

❯ pyenv
pyenv 1.2.21
Usage: pyenv  []

Some useful pyenv commands are:
   --version Display the version of pyenv
   commands List all available pyenv commands
   exec Run an executable with the selected Python version
   global Set or show the global Python version(s)
   help Display help for a command
   hooks List hook scripts for a given pyenv command
   init Configure the shell environment for pyenv
   install Install a Python version using python-build
   local Set or show the local application-specific Python version(s)
   prefix Display prefix for a Python version
   rehash Rehash pyenv shims (run this after installing executables)
   root Display the root directory where versions and shims are kept
   shell Set or show the shell-specific Python version
   shims List existing pyenv shims
   uninstall Uninstall a specific Python version
   version Show the current Python version(s) and its origin
   version-file Detect the file that sets the current pyenv version
   version-name Show the current Python version
   version-origin Explain how the current Python version is set
   versions List all Python versions available to pyenv
   whence List all Python versions that contain the given executable
   which Display the full path to an executable

See `pyenv help ' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme

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

❯ pyenv help install
Usage: pyenv install [-f] [-kvp] 
       pyenv install [-f] [-kvp] 
       pyenv install -l|--list
       pyenv install --version

  -l/--list List all available versions
  -f/--force Install even if the version appears to be installed already
  -s/--skip-existing Skip if the version appears to be installed already

  python-build options:

  -k/--keep Keep source tree in $PYENV_BUILD_ROOT after installation
                     (defaults to $PYENV_ROOT/sources)
  -p/--patch Apply a patch from stdin before building
  -v/--verbose Verbose mode: print compilation status to stdout
  --version Show version of python-build
  -g/--debug Build a debug version

For detailed information on installing Python versions with
python-build, including a list of environment variables for adjusting
compilation, see: https://github.com/pyenv/pyenv#readme

Если мы ищем доступные версии (используя -l или --лост ), мы увидим огромный список (более 400 версий на сегодня).

❮ pyenv install -l
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4.0
  2.4.1
...
  stackless-3.5.4
  stackless-3.7.5

Я просто хочу проверить последнюю версию 3.9 (3.9.0 по сравнению с этой записью), поэтому я установлю его. Это займет немного.

> pyenv install 3.9.0
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.9.0.tar.xz...
-> https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tar.xz
Installing Python-3.9.0...
python-build: use readline from homebrew
python-build: use zlib from Xcode sdk
Installed Python-3.9.0 to /Users/mcw/.pyenv/versions/3.9.0

Теперь, когда он установлен, мы видим это в нашем списке. (Примечание. У меня ранее установлена версия 3.6.10).

❯ pyenv versions
  system
  3.6.10
  3.9.0

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

pyenv global system 3.6.10 3.9.0

Это приведет к тому, что система Python System первым будет найден, но версии 3.6 и 3.9 могут быть подхвачены своими конкретными прокладками. Наличие нескольких глобальных версий может быть полезна для инструментов, которые необходимо иметь возможность запускать несколько версий Python в той же оболочке, вызывая определенные версии (например, работает Python3.6 или Python3 вместо Python ).

Быстрая сторона примечания: вы можете быть соблазнены при использовании PENV, чтобы использовать функцию оболочки который Чтобы определить, какая версия Python находится на вашем пути. Однако это всегда разочарует вас, так как он просто скажет вам местоположение прокладки. Используйте Пьенв, который команда вместо этого. Использовать Пенв откуда Чтобы найти все установленные версии, которые дали установленные двоичные команды Python.

❯ which python
/Users/mcw/.pyenv/shims/python
❯ pyenv which python
/usr/bin/python
❯ pyenv which python3.6
/Users/mcw/.pyenv/versions/3.6.10/bin/python3.6
❯ pyenv which python3.9
/Users/mcw/.pyenv/versions/3.9.0/bin/python3.9
❯ pyenv which python3.7
pyenv: python3.7: command not found
❯ pyenv whence pip
3.6.10
3.9.0

Теперь глобальная версия имеет некоторое использование, но где Pyenv действительно полезен в использовании местных версий. Вы можете заставить определенную версию Python только для локального каталога. Таким образом, для моего мотивации примера пробуждения функций Python 3.9 я могу изолировать использование этой версии в один каталог. Пьенв достигает этого через .python-версия Файл размещен в этом каталоге, чтобы остановить использование локальной версии, вы можете удалить этот файл или использовать Пьенв Местные --Unset вернуться к глобальной версии.

❯ mkdir -p ~/projects/python3.9
❯ cd ~/projects/python3.9
❯ pyenv local 3.9.0
❯ python --version
Python 3.9.0
❯ pyenv version
3.9.0 (set by /Users/mcw/projects/python3.9/.python-version)
❯ cat .python-version
3.9.0

Другой способ установить версию Python является использование оболочки конкретной версии. Когда эта опция используется, этот экземпляр вашей оболочки будет использовать указанную версию и игнорировать локальные и глобальные параметры. Основная реализация просто устанавливает вариабельную среду Pyenv_version. Таким образом, вы можете просто установить это без использования команды, если хотите. Вы можете использовать PENV версии Команда, чтобы увидеть, какую версию вы используете в данный момент или Версии PENV Чтобы увидеть все версии, которые доступны вам.

❯ pyenv version
system (set by /Users/mcw/.pyenv/version)
3.6.10 (set by /Users/mcw/.pyenv/version)
3.9.0 (set by /Users/mcw/.pyenv/version)
❯ pyenv shell 3.9.0
❯ pyenv version
3.9.0 (set by PYENV_VERSION environment variable)
❯ export PYENV_VERSION=3.6.10
❯ pyenv version
3.6.10 (set by PYENV_VERSION environment variable)
❯ pyenv shell --unset
❯ pyenv version
system (set by /Users/mcw/.pyenv/version)
3.6.10 (set by /Users/mcw/.pyenv/version)
3.9.0 (set by /Users/mcw/.pyenv/version)

И теперь позвольте мне посмотреть на одного из этих новых функций Python 3.9:

❯ python
Python 3.9.0 (default, Oct 25 2020, 16:22:53)
[Clang 11.0.3 (clang-1103.0.32.62)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> s = "a test example"
>>> s.removeprefix("a ")
'test example'

И это сработало!

Надеется, что это был полезный обзор того, как работает pyenv и почему вы можете захотеть использовать его для поддержки несколько версии Python в среде. Я считаю очень полезным для того, чтобы позволить мне иметь разные версии Python для разных проектов и коммунальных услуг и еще быстро воспроизводиться с новой версией. Особенно полезно для установки утилитов оболочки, которые обычно полезны и написаны в Python (думают о вещах, таких как линта, инструменты для тестирования или третий инструменты, такие как AWS Tools). В будущем я посмотрю на то, как вы также можете использовать виртуальные среды с PENV, чтобы дополнительно изолировать ваши проекты.

Оригинал: “https://dev.to/wrighter/you-can-easily-and-sensibly-run-multiple-versions-of-python-with-pyenv-29ck”