Как управлять Python с помощью Pyenv и Direnv

В этом руководстве вы установите pyenv для управления средами Python, установите direnv для автоматической настройки и источника virtualenv для проектов, установите глобальную версию Python и локальную версию Python для проектов, а также настроите virtualenv и автоматически создадите venv при перемещении. в каталоги вашего проекта. К концу этого руководства вы сможете установить любую действующую версию Python, настроить виртуальные среды для каждого проекта и избавиться от хаоса.

Предварительные условия

Мы собираемся установить оба pyenv и direnv через homebrew чтобы облегчить процесс установки. Прежде чем начать, установите homebrew , если у вас его еще нет.

Работа с pyenv

Для начала вы увидите, как работать с pyenv.

Установка pyenv

Для начала мы собираемся выполнить установку pyenv с помощью homebrew и добавить необходимую pyenv инициализацию в наш ~/.bashrc файл.

brew install pyenv
echo 'eval "$(pyenv init -)"' >> ~/.bashrc # initialize pyenv on new shells
source ~/.bashrc # reinitialize bashrc to reflect changes in your current shell

После установки найдите время, чтобы изучить, как выглядит наша среда. В новой системе вы увидите что-то похожее на это:

which pyenv
Output
/usr/local/bin/pyenv
pyenv versions

Output
* system
which pip

Output
/usr/local/bin/pip
which python

Output
/usr/local/bin/python

Это довольно стандартный снимок. Когда вы выполните python version, вы заметите * system, как следует из ссылки, что это версия Python вашей системы. Звездочка обозначает текущий двоичный файл Python, полученный из вашего файла ${PATH}.

Хорошее практическое правило — оставлять системный двоичный файл в покое. Если вы хотите просмотреть список версий Python, которые pyenv можно установить, используйте pyenv install --list.

pyenv install 2.7.15
pyenv install 3.7.0
pyenv versions

Output
* system (set by /Users/iamjohnnym/.pyenv/version)
  2.7.15
  3.7.0

Настройка базовых требований

Теперь давайте обновимся, pipпоскольку есть вероятность, что установлена ​​более старая версия. Следующая команда просмотрит установленные версии и обновит их pipдо последней версии.

for VERSION in $(pyenv versions --bare) ; do
  pyenv shell ${VERSION} ;
  pip install --upgrade pip ;
done

Ради желаемого рабочего процесса мы хотим установить py2venv наши Python 2.x версии, чтобы мы могли имитировать python 3.xустановку virtualenvs. python -m venv .venv.

for VERSION in $(pyenv versions --bare | egrep '^2.') ; do
  pyenv shell ${VERSION} ;
  pip install py2venv ;
done

Установка глобальной версии Python

Несмотря на то, что мы pyenv установили, по умолчанию он все равно будет system. Чтобы изменить это, установите python 3.7.0 в качестве глобальной версии:

pyenv global 3.7.0
pyenv versions
Output
  system
  2.7.15
* 3.7.0 (set by /Users/iamjohnnym/.pyenv/version)
which python

Output
/Users/iamjohnnym/.pyenv/shims/python

У нас есть pyenvнастройка и функционал. Давайте перейдем к direnv.

Работаем с Direnv

Direnv — это удобная утилита, которая позволяет вам создать файл, помещенный в любой каталог, который вы хотите, и который будет функционировать как .bashrc. Всякий раз, когда вы входите в каталог с этим файлом, ваша оболочка автоматически выполняет его.

Возможности безграничны, но для целей этой статьи мы собираемся использовать его для настройки виртуальной среды Python на основе файла, .python-version а затем активировать ее для нас. Цель состоит в том, чтобы создать непрерывный поток разработки. Не нужно беспокоиться о ручной настройке или активации виртуальных окружений; пусть ваш компьютер сделает всю работу за вас.

Установка Direnv

Установка проста с помощью доморощенного:

brew install direnv

direnv теперь установлен и готов к эксплуатации. Давайте попробуем пример проекта.

Создание нового проекта

Давайте запустим проект. Мы собираемся создать новый каталог, установить локальную версию Python, настроить наш .envrc файл и активировать его.

mkdir -p ~/python-projects/pyenv-tutorial
cd $_ # if you're unaware, $_ will execute the last argument of your command
pwd
Output
/Users/iamjohnnym/ python-projects/pyenv-tutorial
pyenv local 3.7.0
cat .python-version
Output
3.7.0

Настройка файла среды

На этом этапе мы готовы создать наш .envrc файл. В вашем любимом редакторе создайте этот файл и добавьте следующее содержимое:

# check if python version is set in current dir
if [ -f ".python-version" ] ; then
    if [ ! -d ".venv" ] ; then
        echo "Installing virtualenv for $(python -V)"
        # if we didn't install `py2venv` for python 2.x, we would need to use
        # `virtualenv`, which you would have to install separately.
        python -m venv .venv
    fi
    echo "Activating $(python -V) virtualenv"
    source .venv/bin/activate
fi
# announce python version and show the path of the current python in ${PATH}
echo "Virtualenv has been activated for $(python -V)"
echo "$(which python)"

Сохраните файл. Если вы сделали это через редактор оболочки, например vim. Вы увидите следующее сообщение direnv: error .envrc is blocked. Run direnv allow to approve its content: . Не волнуйтесь, это функция безопасности, предотвращающая автоматическое выполнение файла. Всякий раз, когда этот файл изменяется, он требует одобрения вручную, прежде чем он снова автоматически запустится. Чтобы активировать его, просто введите команду direnv allowиз каталога проекта.

direnv allow
Output
direnv: loading .envrc
Installing virtualenv for Python 3.7.0
Activating Python 3.7.0 virtualenv
Virtualenv has been activated for Python 3.7.0
/Users/iamjohnnym/.personal/tutorials/pyenv-direnv/.venv/bin/python
direnv: export +VIRTUAL_ENV ~PATH

Заключение

Теперь у вас есть инструменты, необходимые для управления различными версиями Python и зависимостями проекта!