Домашня мова: Відкат від Python 3.7 до Python 3.6.5.x?


73

brew upgradeМодернізував систему Python на Python 3.7. На жаль, Python 3.7 розбиває інше програмне забезпечення, яке мені потрібно використовувати (включаючи, але не обмежуючись цим, лише Ansible). Я думаю, ці проблеми будуть розроблені протягом наступного тижня або близько того, але тим часом я хотів би відкатати на Python 3.6.5.x

А brew info pythonпоказує, що попередні версії все ще встановлені та не очищені:

 brew info python
python: stable 3.7.0 (bottled), HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python/3.6.5 (4,825 files, 100.8MB)
  Poured from bottle on 2018-03-31 at 20:21:57
/usr/local/Cellar/python/3.6.5_1 (4,788 files, 99.9MB)
  Poured from bottle on 2018-06-20 at 16:00:26
/usr/local/Cellar/python/3.7.0 (4,869 files, 103.3MB)
  Poured from bottle on 2018-07-01 at 19:30:37
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/python.rb

Різні brew linkта brew installкоманди, запропоновані іншими сайтами, схоже, не працюють:

 brew link python@3.6.5
Error: No such keg: /usr/local/Cellar/python@3.6.5
 brew link python@3.6.5_1
Error: No such keg: /usr/local/Cellar/python@3.6.5_1
 brew install python@3.6.5
Error: No available formula with the name "python@3.6.5" 
==> Searching for a previously deleted formula (in the last month)...
Error: No previously deleted formula found.
==> Searching for similarly named formulae...
==> Searching local taps...
Error: No similarly named formulae found.
==> Searching taps...
==> Searching taps on GitHub...
Error: No formulae found in taps.

10
Для тих , хто не має 3.6.5_1 встановлений, є спосіб , щоб отримати його через варіння: stackoverflow.com/a/51125014/760905
MartyMacGyver

Існує версія пітона 3.7.1. можливо, це вирішує ваші проблеми.
jmh

Відповіді:


82

Якщо у вас все ще є попередні версії, ви можете просто скористатися

brew switch python 3.6.5_1

1
Дайте мені пару місяців, я буду готовий перейти на 3,7. Коли настає цей день, як я скасую цю brew switch ...команду, щоб повернутися до 3.7?
Пітер Бенгтссон

Чим це відрізняється від створення віртуального середовища, приєднаного до Python 3.6.5?
jmh

@jmh чомусь віртуальне середовище 3.6.5 зламалося, коли я використовував Homebrew для оновлення до 3.7, і я не зовсім зрозумів, чому. Звичайно, однією з причин я створив віртуальне середовище в першу чергу - уникати цього питання. Перемикання назад виправлено. Оскільки нічого в 3.7 для мене не є критичним, я просто дотримуюся 3.6.5.
knilsilooc

2
Я зрозумів, що причина вищесказаного полягає в тому, що вбудована програма Python створює символьні посилання, які розриваються при переході від Python 3.6.x до 3.7.x. Створення venvs з python3 -m venv --copies venvкопіями файлів Python замість створення символьних посилань, що запобігає їх руйнуванню під час оновлення вашої версії Python.
knilsilooc

8
Error: python does not have a version "3.6.5_1" in the Cellar. python installed versions: 3.7.0
mrgloom

51

Якщо у вас немає попередньої версії, на яку можна перейти, ви можете встановити з попередньої формули таким чином:

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

Оновлення 2019-10

- повідомлення про незадовільні залежності

Якщо ви використовуєте --ignore-dependenciesпрапор для подолання recursive dependencyпомилки, він може призвести до наступної помилки, коли ви робите pip3 installпісля такої установки:

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

Вирішення проблеми може бути спочатку встановити свої залежності (все, крім sphinx-doc)

$ brew install pkg-config gdbm openssl readline sqlite xz

Зауважте, що він потребує, opensslа НЕ openssl@1.1 є останньою залежністю в домашньому пітоні 3.7.4_1


1
Я думаю, було б корисно, якщо ви також поясніть, що brew unlink pythonробить.
nbro

Крім того, ви повинні підкреслити, що це, очевидно, не видаляє вашу поточну версію Python 3.7, і що пізніше ви можете перейти до неї (використовуючи, наприклад, те, що пропонується https://apple.stackexchange.com/a/329192/90775 ).
nbro

9
Якщо ви отримуєте питання про рекурсивної залежності, це можна обійти, ігноруючи залежності: brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb.
Ерік Вінер

Якщо --ignore-dependenciesне працює через сфінкса, прокоментуйте залежність від сфінкса та перевстановіть сфінкс, як описано тут: pyimagesearch.com/2019/01/30/…
thadk

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

11

Два варіанти

Щоб відновити раніше встановлену версію Python:

brew switch python 3.x.x_x # Ex. 3.6.5_1

Використовуйте, brew info pythonщоб побачити, що ви раніше встановили

Для чистої установки Python 3.6.5 використовуйте:

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

Довга відповідь

Існує дві формули для установки 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.


1
github.com/sashkab/homebrew-python, здається, це робить
Коник


2

Ви можете тимчасово повернути назад homebrew-coreі встановити HOMEBREW_NO_AUTO_UPDATEзмінну, щоб утримувати її на місці:

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

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

Ви також можете витягнути старі версії домашніх формул у власний кран (tap_owner / tap_name) за допомогою brew extractкоманди:

brew extract python tap_owner/tap_name --version=3.6.5

Зробити власний кран або знайти когось, хто автоматизовано підтримував серію 3.6 та інші серії з оновленнями, безумовно, найкращий спосіб. Якщо вони роблять це правильно, ви можете мати повністю кваліфіковану версію та зв’язати її brew link python@3.6.x. Хоча також pyenvє інший варіант.
dragon788

-1

Я не експерт з цього питання, але мав те саме питання. Це для мене працювало: $ brew unlink python $ brew uninstall --ignore-dependencies python3 $ brew uninstall pipenv then from https://www.python.org/downloads/ installed python 3.6.6 $ brew install pipenv

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.