Как я могу установить предыдущую версию Python 3 в macOS с помощью homebrew?


133

Как я могу установить предыдущую версию Python 3 в macOS с помощью brew?

С помощью этой команды brew install pythonя получил последнюю версию Python 3 (в настоящее время v3.7.0), но мне нужна последняя версия Python 3.6 (в настоящее время 3.6.5).

Я читал о другом пакете, pyenvкоторый может помочь в установке другого Python, но это решение мне не подходит.


5
Как бы то ни было, поддержка Homebrew нескольких версий Python ужасна и постепенно ухудшается. Я бы порекомендовал вам вообще избегать использования Homebrew для установки Python. Python.org предоставляет установочные пакеты macOS для различных версий Python, которые могут быть установлены бок о бок друг с другом (и бок о бок с установкой Homebrew Python, если хотите). Либо использование этих пакетов, либо использование такого инструмента, как pyenv , в конечном итоге избавит вас от многих проблем в долгосрочной перспективе.
Дэниел Прайден

Ответы:


256

Короткий ответ

Чтобы выполнить чистую установку Python 3.6.5, используйте:

brew unlink python # ONLY if you have installed (with brew) another version of python 3
brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

Если вы предпочитаете восстановить ранее установленную версию, тогда:

brew info python           # To see what you have previously installed
brew switch python 3.x.x_x # Ex. 3.6.5_1

Длинный ответ

Есть две формулы для установки Python с Homebrew: python@2и python.
Первый предназначен для Python 2, а второй - для Python 3.

Примечание. Вы можете найти устаревшие ответы в Интернете, где он упоминается python3как имя формулы для установки Python версии 3. Теперь это просто python!

По умолчанию с помощью этих формул вы можете установить последнюю версию соответствующей основной версии Python. Таким образом, вы не можете напрямую установить младшую версию, например 3.6.

Решение

С помощью brewвы можете установить пакет, используя адрес формулы, например, в репозитории git.

brew install https://the/address/to/the/formula/FORMULA_NAME.rb

Или специально для Python 3

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/COMMIT_IDENTIFIER/Formula/python.rb

Адрес, который вы должны указать, является адресом последней фиксации формулы (python.rb) для желаемой версии. Вы можете найти идентификатор commint, просмотрев историю homebrew-core / Formula / python.rb

https://github.com/Homebrew/homebrew-core/commits/master/Formula/python.rb

Python> 3.6.5

В приведенной выше ссылке вы не найдете формулы для версии Python выше 3.6.5. После того, как сопровождающие этого (официального) репозитория выпустили Python 3.7, они отправляют обновления только для рецепта Python 3.7.

Как объяснялось выше, с домашним пивом у вас есть только Python 2 (python @ 2) и Python 3 (python), явной формулы для Python 3.6 нет .

Хотя эти незначительные обновления в большинстве случаев и для большинства пользователей в основном неактуальны, я буду искать, не выполнил ли кто-нибудь явную формулу для 3.6.


2
Как это повлияет или будет взаимодействовать с пакетами в Homebrew, которые полагаются на интерпретатор python3 по умолчанию?
Telemachus

1
В любом случае приложения, зависящие от Python (установленные с brew или нет), будут искать исполняемый файл python3 в пути к приложениям, и у вас будет python3, указывающий на python3.6. Таким образом, ваш Python 3 по умолчанию будет 3.6 (если вы используете пример выше), и этого должно быть достаточно. Python 3.7 появился совсем недавно; Я сомневаюсь, что есть приложение, которое явно требует Python 3.7, точно так же я не знаю ни одного приложения, которое работает только с Python 3.6. Другими словами. Все будет хорошо :)
ePi272314

2
Я установил 3.7 и получил эту ошибку: Error: python 3.7.0 is already installed To install 3.6.5_1, first run brew unlink python '' при использовании 'короткого ответа'.
wuliwong

2
Благодарим вас за прямую ссылку на фиксацию версии 3.6.5. Вы спасли меня от безвыходной ситуации.
tsalaroth

4
Я знаю, что это немного старше, но я изо всех сил пытаюсь понять, как вы получили ссылку на формулу. Текущая версия 3.6 - 3.6.7, есть ли простой способ найти эту формулу?
diek

32

В качестве обновления при выполнении

brew unlink python # If you have installed (with brew) another version of python
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

Вы можете столкнуться с

Error: python contains a recursive dependency on itself:
  python depends on sphinx-doc
  sphinx-doc depends on python

Чтобы обойти это, добавьте --ignore-dependenciesаргумент brew install.

brew unlink python # If you have installed (with brew) another version of python
brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

1
и тогда у вас будет кошмар с адом зависимостей ... вроде discourse.brew.sh/t/brew-install-python3-fails/1756/7
confiq

4
сначала это не сработало для меня; по сути, пришлось сделать это: brew install --debug --ignore-dependencies raw.githubusercontent.com/Homebrew/homebrew-core/… и как только он не удастся сделать html, просто проигнорируйте ошибку, выбрав 2). ошибка html / docs, вероятно, меня позже укусит, но пока все работает нормально: shrug:
beans

21

Я сначала установил python 3.7.

brew install python3
brew unlink python

затем я установил python 3.6.5, используя ссылку выше

brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb --ignore-dependencies

После этого я убежал brew link --overwrite python. Теперь у меня есть все питоны в системе для создания виртуальных сред.

mian@tdowrick2~ $ python --version
Python 2.7.10
mian@tdowrick2~ $ python3.7 --version
Python 3.7.1
mian@tdowrick2~ $ python3.6 --version
Python 3.6.5

Для создания виртуальной среды Python 3.7.

mian@tdowrick2~ $ virtualenv -p python3.7 env
Already using interpreter /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.7'
New python executable in /Users/mian/env/bin/python3.7
Also creating executable in /Users/mian/env/bin/python
Installing setuptools, pip, wheel...
done.
mian@tdowrick2~ $ source env/bin/activate
(env) mian@tdowrick2~ $ python --version
Python 3.7.1
(env) mian@tdowrick2~ $ deactivate

Чтобы создать виртуальную среду Python 3.6

mian@tdowrick2~ $ virtualenv -p python3.6 env
Running virtualenv with interpreter /usr/local/bin/python3.6
Using base prefix '/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/mian/env/bin/python3.6
Not overwriting existing python script /Users/mian/env/bin/python (you must use /Users/mian/env/bin/python3.6)
Installing setuptools, pip, wheel...
done.
mian@tdowrick2~ $ source env/bin/activate
(env) mian@tdowrick2~ $ python --version
Python 3.6.5
(env) mian@tdowrick2~ $ 

1
Хотя это выглядит так, как будто это было бы здорово, это больше не работает, результат:python -V && python3.7 -V && python3 -V && python3.6 -V Python 2.7.15 Python 3.7.3 Python 3.7.3 zsh: command not found: python3.6
Wafer

1
Посмотрите внимательно на мой ответ, для 3.6 вам нужно написать python3.6 -V. Вы сделали python3 -Vдважды, вот почему вы 3.7.3дважды получаете и 3.6
промахиваетесь

1
Для меня, это шкура python3.6под /usr/local/Cellar/python/3.6.5_1/bin. Как только я сделал ссылку, она работает, как вы говорите. Эта система самоуправления на питоне кажется фракталом Рубина Голдберга миллиона программистов, кодирующих броуновское движение.
Эрик Лещински

11

Я попробовал все ответы выше, чтобы установить Python 3.4.4. Установка python сработала, но PIP не установился, и я ничего не мог сделать, чтобы заставить его работать. Я использовал Mac OSX Mojave, что вызывало некоторые проблемы с zlib, openssl.

Что не делать:

  • Старайтесь избегать использования Homebrew для предыдущей версии, заданной формулой Python или Python3 .
  • Не пытайтесь скомпилировать Python

Решение:

  1. Загрузите 64-разрядный установщик macOS или 64-разрядный / 32-разрядный установщик macOS : https://www.python.org/downloads/release/python-365/
  2. На предыдущем шаге он загрузит Python 3.6.5 , если, например, вы хотите загрузить Python 3.4.4 , замените URL-адрес выше python-365 на python-344
  3. Скачать нажмите на файл, который вы скачали, откроется установщик с графическим интерфейсом.
  4. Если вы загрузили python-365 , после установки, чтобы запустить эту версию python, введите в терминале python365 , то же самое для pip, это будет pip365.

ps: вам не нужно удалять другую версию Python в вашей системе.


Редактировать:


Я нашел гораздо лучшее решение, которое работает на MacOSX, Windows, Linux и т. Д.

  1. Неважно, установлен ли у вас python или нет.
  2. Скачать Anaconda
  3. После установки в типе терминала: conda init
  4. В терминале создайте виртуальную среду с любой версией Python, например, я выбрал 3.4.4:conda create -n [NameOfYour VirtualEnvironment] python=3.4.4
  5. Затем в терминале вы можете проверить всю виртуальную среду, которую вы создали, с помощью команды: conda info --envs
  6. Затем в терминале активируйте виртуальную среду по вашему выбору с помощью: conda activate [The name of your virtual environment that was shown with the command at step 5]

10

Я перепробовал все, но не смог заставить работать. Наконец, я использовал, pyenvи он работал прямо как шарм.

Итак, homebrewустановив, просто выполните:

brew install pyenv
pyenv install 3.6.5

для управления виртуальными машинами:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

См. Pyenv и pyenv-virtualenv для получения дополнительной информации.

РЕДАКТИРОВАТЬ (2019/03/19)

Я обнаружил, что использовать pyenv-installer проще, чем homebrew, для установки pyenv и pyenv-virtualenv direclty:

curl https://pyenv.run | bash

Чтобы управлять версией Python, либо глобально:

pyenv global 3.6.5

или локально в заданном каталоге:

pyenv local 3.6.5

На самом деле это не прямой ответ на вопрос, а virtualenvподход к его обходу .
javadba

1
на самом деле virtualenv не нужен. pyenvпозволяет управлять версиями python без необходимости использования venv
ClementWalter

6

В случае, если кто-то столкнется с проблемой пипса, как показано ниже

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

Основная причина в том, что openssl 1.1 больше не поддерживает python 3.6. Итак, вам необходимо установить старую версию openssl 1.0

вот решение:

brew uninstall --ignore-dependencies openssl
brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

1

Чтобы решить эту проблему homebrew, вы можете временно задним числом homebrew-coreустановить HOMEBREW_NO_AUTO_UPDATEпеременную, которая будет удерживать ее на месте:

cd `brew --repo homebrew/core`
git checkout f2a764ef944b1080be64bd88dca9a1d80130c558
export HOMEBREW_NO_AUTO_UPDATE=1
brew install python

Я не рекомендую постоянно обновлять homebrew-core, так как вы упустите исправления безопасности, но это полезно для целей тестирования.

Вы также можете извлечь старые версии формул домашнего пивоварения в свой собственный кран (tap_owner / tap_name), используя brew extractкоманду:

brew extract python tap_owner/tap_name --version=3.6.5

0

Самым простым способом для меня было установить Anaconda: https://docs.anaconda.com/anaconda/install/

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

Чтобы установить разные версии Python, просто следуйте этим инструкциям https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html

Новая среда разработки с другой версией Python была создана за 2 минуты. А в будущем я легко могу переключаться туда и обратно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.