Homebrew: การย้อนกลับจาก Python 3.7 ถึง Python 3.6.5.x


72

brew upgradeอัพเกรดระบบของฉันหลามหลาม 3.7 น่าเสียดายที่ Python 3.7 ใช้ซอฟต์แวร์อื่นที่จำเป็นต้องใช้ (รวมถึง แต่ไม่ จำกัด เพียง Ansible) ฉันคิดว่าปัญหาเหล่านี้จะได้ผลในสัปดาห์หน้าหรือมากกว่านั้น แต่ในระหว่างนี้ฉันต้องการย้อนกลับไปเป็น Python 3.6.5.x

A 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 ได้อย่างไร
Peter Bengtsson

สิ่งนี้แตกต่างจากการสร้างสภาพแวดล้อมเสมือนจริงที่เชื่อมต่อกับ Python 3.6.5 อย่างไร
jmh

@jmh ด้วยเหตุผลบางประการสภาพแวดล้อมเสมือนจริง 3.6.5 ของฉันหยุดลงเมื่อฉันใช้ Homebrew เพื่ออัปเดตเป็น 3.7 และฉันก็ไม่ได้คิดว่าทำไม แน่นอนหนึ่งในเหตุผลที่ฉันสร้างสภาพแวดล้อมเสมือนจริงในตอนแรกก็เพื่อหลีกเลี่ยงปัญหานั้น การสลับกลับมาแก้ไขแล้ว เนื่องจากไม่มีอะไรใน 3.7 มีความสำคัญสำหรับฉันฉันแค่ติดกับ 3.6.5 ในขณะนี้
knilsilooc

2
ฉันรู้ว่าสาเหตุข้างต้นคือ venv ในตัวของ Python สร้าง symlink ซึ่งหยุดเมื่อไปจาก Python 3.6.x ถึง 3.7.x การสร้าง venvs ด้วยการpython3 -m venv --copies venvคัดลอกไฟล์ Python แทนที่จะสร้าง symlink ซึ่งป้องกันไม่ให้แตกเมื่ออัพเกรด 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ซึ่งเป็นพึ่งพาล่าสุดใน homebrew python 3.7.4_1


1
ฉันคิดว่ามันจะมีประโยชน์ถ้าคุณอธิบายbrew unlink pythonด้วยเช่นกัน
nbro

ยิ่งไปกว่านั้นคุณควรเน้นว่านี่ไม่ได้เป็นการลบเวอร์ชัน Python 3.7 ปัจจุบันของคุณออกไปและในภายหลังคุณสามารถสลับกลับไปเป็นเวอร์ชั่นอื่นได้ (โดยใช้สิ่งที่แนะนำhttps://apple.stackexchange.com/a/329192/90775 )
nbro

9
ถ้าคุณได้รับปัญหาเกี่ยวกับการพึ่งพาอาศัยกัน recursive brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rbนี้สามารถข้ามโดยไม่สนใจการอ้างอิง:
Eric Wiener

ถ้า--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

คำตอบยาว ๆ

มีสองสูตรสำหรับการติดตั้งกับงูหลาม Homebrew คือและpython@2 อันแรกสำหรับ Python 2 และที่สองสำหรับ Python 3python

หมายเหตุ:คุณสามารถค้นหาคำตอบที่ล้าสมัยบนเว็บที่มีการกล่าวถึง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) สำหรับรุ่นที่ต้องการ คุณสามารถค้นหาตัวบ่งชี้การคอมมิชชันโดยดูที่ประวัติสำหรับ 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 เท่านั้น

ตามที่ได้อธิบายข้างต้นกับ homebrew คุณมีเพียงงูหลาม 2 (หลาม @ 2) และ Python 3 (งูใหญ่) ไม่มีสูตรที่ชัดเจนสำหรับ Python 3.6

แม้ว่าการอัปเดตย่อยเหล่านั้นส่วนใหญ่จะไม่เกี่ยวข้องในกรณีส่วนใหญ่และสำหรับผู้ใช้ส่วนใหญ่ฉันจะค้นหาว่ามีใครทำสูตรที่ชัดเจนสำหรับ 3.6


1
github.com/sashkab/homebrew-pythonดูเหมือนจะทำมัน
ตั๊กแตน


2

คุณสามารถ backdate ชั่วคราว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

ฉันไม่แนะนำการ backdating homebrew-core อย่างถาวรเนื่องจากคุณจะพลาดซอฟต์แวร์รักษาความปลอดภัย แต่มันมีประโยชน์สำหรับการทดสอบ

คุณยังสามารถแยกสูตร homebrew เวอร์ชันเก่าลงใน tap ของคุณเอง (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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.