Как управлять 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 и зависимостями проекта!