Homebrew: Phục hồi từ Python 3.7 sang Python 3.6.5.x?


73

A đã brew upgradenâng cấp hệ thống Python của tôi lên Python 3.7. Thật không may, Python 3.7 phá vỡ các phần mềm khác mà tôi cần sử dụng (bao gồm nhưng không giới hạn ở Ansible). Tôi tưởng tượng những vấn đề này sẽ được giải quyết trong tuần tới hoặc lâu hơn, nhưng trong lúc này, tôi muốn quay trở lại với Python 3.6.5.x

A brew info pythoncho thấy các phiên bản trước vẫn được cài đặt và không bị xóa:

 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

Các lệnh brew linkbrew installlệnh khác nhau được đề xuất bởi các trang web khác dường như không hoạt động:

 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
Đối với những người chưa cài đặt 3.6.5_1, có một cách để tải nó qua brew: stackoverflow.com/a/51125014/760905
MartyMacGyver

Có phiên bản python 3.7.1. có lẽ điều đó khắc phục vấn đề của bạn.
jmh

Câu trả lời:


82

Nếu bạn vẫn có sẵn các phiên bản trước, bạn chỉ có thể sử dụng

brew switch python 3.6.5_1

1
Hãy cho tôi một vài tháng tôi sẽ sẵn sàng để chuyển sang 3.7. Khi ngày đó đến, làm thế nào để tôi hoàn tác brew switch ...lệnh này để quay lại 3.7?
Peter Bengtsson

Điều này khác với việc tạo một môi trường ảo gắn liền với Python 3.6.5 như thế nào?
jmh

@jmh vì một số lý do, môi trường ảo 3.6.5 của tôi bị hỏng khi tôi sử dụng Homebrew để cập nhật lên 3.7 và tôi không hiểu tại sao. Tất nhiên, một trong những lý do khiến tôi tạo ra môi trường ảo ngay từ đầu là để tránh vấn đề đó. Chuyển lại cố định nó. Vì không có gì trong 3.7 là quan trọng đối với tôi, nên tôi chỉ gắn bó với 3.6.5 vào lúc này.
knilsilooc

2
Tôi nhận ra rằng lý do ở trên là venv tích hợp của Python tạo ra các liên kết tượng trưng, ​​bị phá vỡ khi đi từ Python 3.6.x đến 3.7.x. Tạo venvs với các python3 -m venv --copies venvbản sao tệp Python thay vì tạo liên kết tượng trưng, ​​ngăn chúng phá vỡ khi nâng cấp phiên bản Python của bạn.
knilsilooc

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

51

Nếu bạn không có phiên bản trước để chuyển sang, bạn có thể cài đặt từ công thức trước theo cách này:

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

Cập nhật 2019-10

- phụ thuộc thông báo

Trong trường hợp bạn đang sử dụng --ignore-dependenciescờ để khắc phục recursive dependencylỗi, nó có thể cung cấp cho bạn lỗi sau khi bạn thực hiện pip3 installsau khi cài đặt như vậy:

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

Một cách giải quyết có thể là cài đặt các phụ thuộc của nó trước (mọi thứ trừ sphinx-doc)

$ brew install pkg-config gdbm openssl readline sqlite xz

Lưu ý rằng nó cần opensslKHÔNG phải openssl@1.1 là một phụ thuộc mới nhất trong python homebrew 3.7.4_1


1
Tôi nghĩ rằng nó sẽ hữu ích nếu bạn cũng giải thích những gì brew unlink pythonkhông.
nbro

Hơn nữa, bạn nên nhấn mạnh rằng điều này dường như không xóa phiên bản Python 3.7 hiện tại của bạn và sau này bạn có thể chuyển trở lại phiên bản đó (sử dụng ví dụ như được đề xuất https://apple.stackexchange.com/a/329192/90775 ).
nbro

9
Nếu bạn gặp vấn đề về sự phụ thuộc đệ quy, điều này có thể được bỏ qua bằng cách bỏ qua các phụ thuộc : brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb.
Eric Wiener

Nếu --ignore-dependencieskhông hoạt động do nhân sư, hãy nhận xét sự phụ thuộc vào nhân sư và cài đặt lại nhân sư như được mô tả ở đây: pyimagesearch.com/2019/01/30/ trên
Thadk

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

11

Hai lựa chọn

Để khôi phục phiên bản Python đã cài đặt trước đó:

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

Sử dụng brew info pythonđể xem những gì bạn đã cài đặt trước đó

Để thực hiện cài đặt Python 3.6.5 sạch, hãy sử dụng:

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

Câu trả lời dài

Có hai công thức để cài đặt Python với Homebrew: python@2python.
Đầu tiên là cho Python 2 và thứ hai cho Python 3.

Lưu ý: Bạn có thể tìm thấy các câu trả lời lỗi thời trên web nơi nó được đề cập python3làm tên công thức để cài đặt phiên bản Python 3. Bây giờ chỉ là python!

Theo mặc định, với các công thức này, bạn có thể cài đặt phiên bản Python mới nhất tương ứng. Vì vậy, bạn không thể trực tiếp cài đặt một phiên bản nhỏ như 3.6.

Giải pháp:

Với brew, bạn có thể cài đặt một gói bằng cách sử dụng địa chỉ của công thức, ví dụ như trong kho git.

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

Hay cụ thể cho Python 3

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

Địa chỉ bạn phải chỉ định là địa chỉ cho lần xác nhận cuối cùng của công thức (python.rb) cho phiên bản mong muốn. Bạn có thể tìm mã định danh commint bằng cách xem lịch sử cho homebrew-core / Formula / python.rb

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

Con trăn> 3.6.5

Trong liên kết ở trên, bạn sẽ không tìm thấy công thức cho phiên bản Python trên 3.6.5. Sau khi các nhà bảo trì của kho lưu trữ (chính thức) đó phát hành Python 3.7, họ chỉ gửi các bản cập nhật cho công thức của Python 3.7.

Như đã giải thích ở trên, với homebrew, bạn chỉ có Python 2 (python @ 2) và Python 3 (python), không có công thức rõ ràng cho Python 3.6 .

Mặc dù hầu hết các bản cập nhật nhỏ này hầu như không liên quan trong hầu hết các trường hợp và đối với hầu hết người dùng, tôi sẽ tìm kiếm nếu ai đó đã thực hiện một công thức rõ ràng cho 3.6.


1
github.com/sashkab/homebrew-python dường như làm điều đó
Grasshopper


2

Bạn có thể tạm thời backdate homebrew-corevà đặt HOMEBREW_NO_AUTO_UPDATEbiến để giữ nó đúng chỗ:

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

Tôi không khuyên bạn nên sao lưu vĩnh viễn homebrew-core, vì bạn sẽ bỏ lỡ các bản vá bảo mật, nhưng nó rất hữu ích cho mục đích thử nghiệm.

Bạn cũng có thể trích xuất các phiên bản cũ của công thức homebrew vào vòi của riêng bạn (tap_owner / tap_name) bằng brew extractlệnh:

brew extract python tap_owner/tap_name --version=3.6.5

Tạo một vòi của riêng bạn hoặc tìm ai đó tự động duy trì 3.6 và các loạt khác với các bản cập nhật chắc chắn là cách tốt nhất để đi. Nếu họ làm đúng, bạn có thể có một phiên bản đủ điều kiện và liên kết nó với brew link python@3.6.x. Mặc dù pyenvlà một lựa chọn khác là tốt.
dragon788

-1

Tôi không phải là một chuyên gia về vấn đề này, nhưng có cùng một vấn đề. Đây là những gì làm việc cho tôi: $ 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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.