Конечно, Homebrew - это здорово, но вы все равно можете иметь надежную среду Python на Mac и без него.

Недавно я обнаружил, что настраиваю новый MacBook Pro для разработки на Python. В Интернете есть множество документации по установке pyenv на Mac, но, похоже, все они сосредоточены на установке через Homebrew. Что ж, это был не вариант для меня, поэтому ниже я описал шаги, которые я предпринял для установки pyenv без Homebrew.

TL;DR

Выполните следующую команду, чтобы установить pyenv.

% curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

Если pyenv по-прежнему не находится на вашем пути, и вы используете последнюю версию MacOS, выполните следующие команды в Терминале.

% PYENV_ROOT="${HOME}/.pyenv"
% echo "export PATH=\"${PYENV_ROOT}/bin:\$PATH\"" >> ~/.zshrc
% echo "eval \"\$(pyenv init -)\"" >> ~/.zshrc
% echo "eval \"\$(pyenv virtualenv-init -)\"" >> ~/.zshrc

Мои характеристики

Я использовал этот метод для установки pyenv на MacBook Pro 2020 года под управлением macOS Catalina.

Использование pyenv-installer

Если вы не хотите использовать Homebrew для установки pyenv, разработчик проекта также предоставляет проект pyenv-installer. Это предоставляет сценарий установки с простой командой bash, которая выполняет установку за вас.

В документации к этому проекту написано, что нужно запустить curl https://pyenv.run | bash, но это дало мне ошибку сертификата.

Есть два способа обойти это. Путь наименьшего сопротивления - использовать флаг -k (не проверять сертификаты) в команде curl. Более безопасный вариант - просто вызвать команду, на которую сценарий pyenv.run перенаправляет вас, которая указывает на GitHub и имеет безопасный сертификат. Чтобы сделать это вместо этого, запустите:

% curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

Эта команда загружает файл установщика и передает файл установщика в bash. Другими словами, он запускает файл в оболочке bash.

Добавление pyenv в путь

К сожалению, использованная нами команда установщика не может успешно добавить pyenv к вашему пути. Это связано с передачей команд в оболочку bash. Начиная с macOS Catalina, Apple начала использовать Zsh (произносится как Z Shell) вместо bash в качестве терминала по умолчанию (источник). Поэтому, когда мы передаем команду в bash, он не знает, что нужно обновить конфигурацию для Zsh.

Простым способом исправить эту ситуацию было бы просто не передавать команду в bash, а вместо этого запускать ее в Zsh. У скрипта есть встроенная логика для обновления профиля Zsh, если он может надлежащим образом определить, что он запущен. Однако, если вы похожи на меня и уже запустили установщик, приведенные ниже шаги исправят ситуацию и добавят pyenv в путь.

Чтобы добавить путь к Zsh, нам нужно выполнить следующие команды, чтобы добавить pyenv в файл конфигурации оболочки.

% PYENV_ROOT="${HOME}/.pyenv"
% echo "export PATH=\"${PYENV_ROOT}/bin:\$PATH\"" >> ~/.zshrc
% echo "eval \"\$(pyenv init -)\"" >> ~/.zshrc
% echo "eval \"\$(pyenv virtualenv-init -)\"" >> ~/.zshrc

Это добавит программу к вашей переменной пути. Отсюда вы можете перезапустить свой терминал и начать использовать pyenv.

Начать использовать pyenv

Установив pyenv, я использовал его для установки последней версии Python. На момент написания это Python 3.8.3. Для установки я запустил:

% pyenv install -v 3.8.3

На этом этапе, если вы проверите свою версию Python, вы все равно увидите версию по умолчанию. В моей системе это выглядело так:

% python -V
Python 2.7.16

Мы должны сообщить системе, какую версию Python мы хотим использовать. Сначала мы можем перечислить версии Python, доступные через pyenv, а затем мы можем сказать pyenv установить глобальную версию на предпочтительную версию. В данном случае это 3.8.3.

% pyenv versions
* system (set by /Users/snolesmuth/.pyenv/version)
3.8.3
% pyenv global 3.8.3
% python -V
Python 3.8.3

Как только мы скажем Python использовать более новую версию, мы можем запустить команду Python как обычно, но pyenv перенаправит на указанную нами версию.

Заключение

Pyenv - невероятно мощный инструмент, позволяющий использовать отдельные установки Python для разных пользователей, проектов или папок по мере необходимости, не полагаясь на устаревшую версию macOS по умолчанию.