Как я могу установить предыдущую версию Python 3 в macOS с помощью brew?
С помощью команды brew install python я получил последнюю версию Python 3 (в настоящее время v3.7.0), но мне нужна последняя версия Python 3.6 (в настоящее время 3.6.5).
Я читал о другом пакете pyenv, который может помочь в установке другого Python, но это решение мне не подходит.
Перед переходом на веб-сайт для ручной загрузки и установки следует рекомендовать @DanielPryden imo pyenv. Люди, которые уже используют homebrew, вероятно, ищут хорошее решение для командной строки. Для тех, кто прокручивает здесь, прокрутите вниз: stackoverflow.com/a/60189988/4600952






Чтобы выполнить чистую установку 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.
Примечание: Вы можете найти устаревшие ответы в Интернете, где в качестве имени формулы для установки Python версии 3 упоминается python3. Теперь это просто 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/commit/master/Formula/python.rb
В приведенной выше ссылке вы не найдете формулы для версии Python выше 3.6.5. После того, как сопровождающие этого (официального) репозитория выпустили Python 3.7, они отправляют обновления только по рецепту Python 3.7.
Как объяснялось выше, с домашним пивом у вас есть только Python 2 (python @ 2) и Python 3 (python), для Python 3.6 нет явной формулы.
Хотя эти незначительные обновления в большинстве случаев и для большинства пользователей в основном неактуальны, я поищу, не выполнил ли кто-нибудь явную формулу для 3.6.
Как это повлияет или будет взаимодействовать с пакетами в Homebrew, которые полагаются на интерпретатор python3 по умолчанию?
Я не использую (и даже не знаю) ни о каком пакете распространяется с Homebrew, который полагается на Python3 (возможно, есть, я просто не использую). Brew установит Pip вместе с Python, поэтому после этого я использую pip для установки всех пакетов Python.
В любом случае приложения, зависящие от Python (установленные с brew или нет), будут искать исполняемый файл python3 в пути к приложениям, и у вас будет python3, указывающий на python3.6. Таким образом, ваш Python 3 по умолчанию будет 3.6 (если вы используете пример выше), и этого должно быть достаточно. Python 3.7 появился совсем недавно; Я сомневаюсь, что есть приложение, которое явно требует Python 3.7, точно так же я не знаю ни одного приложения, которое работает только с Python 3.6. Другими словами. У тебя все будет отлично :)
Я установил 3.7 и получил эту ошибку: Error: python 3.7.0 is already installed To install 3.6.5_1, first run brew unlink python '' при использовании 'короткого ответа'.
Благодарим вас за прямую ссылку на фиксацию версии 3.6.5. Вы спасли меня от безвыходной ситуации.
Я знаю, что это немного старше, но я изо всех сил пытаюсь понять, как вы получили ссылку на формулу. Текущая версия 3.6 - 3.6.7. Есть ли простой способ найти эту формулу?
Hola @diek. К сожалению, в официальном репозитории нет формулы для python> 3.6.5. Я просто редактирую свой ответ, чтобы объяснить это. Я тоже буду искать решение.
Как удалить версию python3.6.5, если она вам больше не нужна?
У меня это не работает в OS X 10.14.4 / XCode 10.2.1 (10E1001). python не может быть собран, отсутствует сборка brew sphinx. Не уверен, что все захотят запускать его с --ignore-dependencies.
Спасибо, спасибо и спасибо. Прямая ссылка на 3.6.5 была очень ценной для многих разработчиков!
@ ePi272314 Спасибо. Есть вопрос. Почему я не могу найти этот идентификатор фиксации: f2a764ef944b1080be64bd88dca9a1d80130c558 в истории для homebrew-core / Formula / python.rb?
Привет @ Jun711. Сначала перейдите к <github.com/Homebrew/homebrew-core>, а затем найдите f2a764ef944b1080be64bd88dca9a1d80130c558; убедитесь, что вы выбрали in this repository. Щелкните Commits слева на странице результатов.
@ ePi272314 спасибо. Теперь я тоже это вижу в журнале git. Я думал, что поиск завершен, но поиск хэша фиксации занял некоторое время.
Что произойдет, если после этого у меня появится brew upgrade? Будет ли это обновлять Python до не-3.6? Могу я как-нибудь предотвратить это?
Ответьте @Johan Walles. Я не могу вспомнить никаких проблем с этим методом и brew upgrade. Теоретически все должно быть в порядке. Команда обновления должна обновлять только установленные формулы, и поскольку вы не используете формулу python, вы не должны получать никаких обновлений этой формулы. Фактически, недостаток этого метода в том, что вы зависнете в Python 3.6.5 (в то время как текущая версия в 3.6.9)
После этого при попытке установить по протоколу для этой установленной версии я получаю ошибки SSL от PIP. /usr/local/Cellar/python/3.6.5_1/bin/pip3 install pylint> pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
@ Патрик, что .../pip3 - это псевдоним или двоичный файл? Если это псевдоним, убедитесь, что он указывает в нужное место.
Это был правильный вариант из 3.6. Я полностью отказался от этого подхода и перешел на Pyenv + pyenv-virtualenv. Благодарность!
На Каталине получаю Installation of python from a GitHub commit URL is unsupported
Привет @ m.spyratos. Попробуйте установить из другого репозитория. Бывший. brew install sashkab/python/[email protected], где x ∊ {6,7,8}
Чтобы решить эту проблему с помощью 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
Как мне определить tap_owner и tap_name для данного пакета?
В качестве обновления при выполнении
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
и тогда у вас будет кошмар с адом зависимостей ... как discourse.brew.sh/t/brew-install-python3-fails/1756/7
сначала это не сработало для меня; по сути, пришлось сделать это: brew install --debug --ignore-dependencies raw.githubusercontent.com/Homebrew/homebrew-core/…, и как только он не удастся сделать html, просто проигнорируйте ошибку, выбрав 2). ошибка html / docs, вероятно, меня позже укусит, но пока все работает нормально: shrug:
Я сначала установил 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~ $ deactivate
Хотя это выглядит так, как будто это было бы здорово, это больше не работает, результат: python -V && python3.7 -V && python3 -V && python3.6 -VPython 2.7.15 Python 3.7.3 Python 3.7.3 zsh: command not found: python3.6
Присмотритесь к моему ответу, для 3.6 вам нужно написать python3.6 -V. Вы делали python3 -V дважды, поэтому вы дважды получаете 3.7.3 и пропускаете 3.6.
Для меня это скрывает python3.6 под /usr/local/Cellar/python/3.6.5_1/bin. Как только я сделал ссылку, она работает, как вы говорите. Эта система самоуправления на питоне кажется фракталом Рубина Голдберга миллиона программистов, кодирующих броуновское движение.
Я попробовал все ответы выше, чтобы установить Python 3.4.4. Установка python сработала, но PIP не установился, и я ничего не мог сделать, чтобы заставить его работать. Я использовал Mac OSX Mojave, что вызывало некоторые проблемы с zlib, openssl.
Что не делать:
Решение:
p.s: Вам не нужно удалять другую версию Python в вашей системе.
Редактировать:
Я нашел гораздо лучшее решение, которое работает на MacOSX, Windows, Linux и т. д.
conda initconda create -n [NameOfYour VirtualEnvironment] python=3.4.4conda info --envsconda activate [The name of your virtual environment that was shown with the command at step 5]Это сработало для меня .. на Mac Catalina .. У меня было 3.9 и 3.7 .. Установлено 3.6.5 первым методом .. Единственная разница теперь заключается в том, чтобы запустить эту версию python, вы наберете в своем терминале python3.6, то же самое для pip это будет pip3.6. Также вы можете проверить установку: - python3.6 --version
Я перепробовал все, но не смог заставить работать. Наконец, я использовал pyenv, и он работал прямо как шарм.
Итак, установив homebrew, выполните следующие действия:
brew install pyenv
pyenv install 3.6.5
для управления виртуальными машинами:
brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name
См. Pyenv и pyenv-virtualenv для получения дополнительной информации.
Я обнаружил, что использовать pyenv-установщик проще, чем homebrew, для установки директив pyenv и pyenv-virtualenv:
curl https://pyenv.run | bash
Чтобы управлять версией Python, либо глобально:
pyenv global 3.6.5
или локально в заданном каталоге:
pyenv local 3.6.5
На самом деле это не прямой ответ на вопрос, а его обход с помощью подхода virtualenv.
на самом деле virtualenv не нужен. pyenv позволяет управлять версиями Python без необходимости использования venv
Я думаю, это лучшее решение в большинстве случаев
В случае, если кто-то столкнется с проблемой пипса, как показано ниже
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
Самым простым способом для меня было установить 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 минуты. А в будущем я легко могу переключаться туда и обратно.
Как бы то ни было, поддержка Homebrew нескольких версий Python ужасна и постепенно ухудшается. Я бы рекомендовал вам вообще избегать использования Homebrew для установки Python. Python.org предоставляет Пакеты установки macOS для различных версий Python, которые можно установить бок о бок друг с другом (и бок о бок с установкой Homebrew Python, если хотите). Либо использование этих пакетов, либо использование такого инструмента, как Pyenv, в конечном итоге избавит вас от многих проблем в долгосрочной перспективе.