Як я можу встановити попередню версію Python 3 в macOS за допомогою homebrew?


133

Як я можу встановити попередню версію Python 3 в macOS за допомогою brew?

За допомогою команди brew install pythonя отримав останню версію Python 3 (наразі v3.7.0), але я хочу останню версію Python 3.6 (на даний момент 3.6.5).

Я читав про ще один пакет, pyenvякий може допомогти в роботі з різною установкою пітона, але це рішення не підходить для мене.


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як назва формули для встановлення версії 3. Python. Тепер це просто 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
Як це вплине або взаємодіє з пакетами на домашньому мові, які покладаються на інтерпретатора python3 за замовчуванням?
Телемах

1
У будь-якому випадку програми, залежні від Python (встановлені з пивом або ні), будуть шукати виконуваний файл 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 заваріть від’єднання python `` при використанні 'короткої відповіді'.
wuliwong

2
Дякуємо, що надали пряме посилання для здійснення 3.6.5. Ти врятував мене від безнадійної ситуації.
цаларот

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 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
і тоді у вас виникне кошмар із
пеклам

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

20

Що я зробив, спершу встановив 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
Вафлі

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 вище пітона-365 з допомогою пітона-344
  3. Натисніть на завантаження файлу, який ви завантажили
  4. Якщо ви завантажили python-365 після установки, щоб запустити цю версію python, ви введете у свій термінал python365 , те саме, що і для pip, це буде pip365

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


Редагувати:


Я знайшов набагато набагато краще рішення, яке працює на MacOSX, Windows, Linux тощо.

  1. Не має значення, ви вже встановили python чи ні.
  2. Завантажте Анаконда
  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]

9

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

Отже, homebrewвстановивши, juste зробіть:

brew install pyenv
pyenv install 3.6.5

для управління virtualenvs:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

Докладнішу інформацію див. У pyenv та pyenv-virtualenv .

EDIT (2019/03/19)

Я встановив, що використовувати pyenv-інсталятор простіше, ніж 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.

Першопричина opensl 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

Я не рекомендую постійно оновлювати домашнє програмне забезпечення, оскільки ви пропустите патчі безпеки, але це корисно для тестування.

Ви також можете витягнути старі версії домашніх формул у власний кран (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.