Làm cách nào tôi có thể cài đặt phiên bản Python 3 trước đó trong macOS bằng homebrew?


133

Làm cách nào tôi có thể cài đặt phiên bản Python 3 trước đó trong macOS bằng brew?

Với lệnh brew install pythontôi đã nhận được phiên bản Python 3 mới nhất (hiện là v3.7.0), nhưng tôi muốn phiên bản cuối cùng của Python 3.6 (hiện là 3.6.5).

Tôi đã đọc về một gói khác pyenvcó thể hỗ trợ xử lý cài đặt python khác nhau, nhưng giải pháp này không phù hợp với tôi.


5
Đối với những gì nó có giá trị, sự hỗ trợ của Homebrew cho nhiều phiên bản Python là rất lớn và đang dần trở nên tồi tệ hơn. Tôi khuyên bạn nên tránh sử dụng Homebrew để cài đặt Python. Python.org cung cấp các gói cài đặt macOS cho các phiên bản Python khác nhau có thể được cài đặt song song với nhau (và song song với cài đặt Python Homebrew nếu bạn muốn). Sử dụng các gói đó hoặc sử dụng một công cụ như pyenv cuối cùng sẽ giúp bạn tiết kiệm rất nhiều đau buồn trong thời gian dài.
Daniel Pryden

Câu trả lời:


255

Câu trả lời ngắn

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

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

Nếu bạn muốn khôi phục phiên bản đã cài đặt trước đó, thì:

brew info python           # To see what you have previously installed
brew switch python 3.x.x_x # Ex. 3.6.5_1

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 Python phiên bản 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 mới nhất của phiên bản Python chính 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 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 thấy đị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 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.


2
Điều này sẽ ảnh hưởng hoặc tương tác với các gói trong Homebrew dựa vào trình thông dịch python3 mặc định như thế nào?
Telemachus

1
Trong mọi trường hợp, một ứng dụng phụ thuộc Python (được cài đặt với brew hay không) sẽ tìm kiếm một python3 có thể thực thi được trong đường dẫn ứng dụng và bạn sẽ có python3 trỏ đến python3.6. Do đó, Python 3 mặc định của bạn sẽ là 3.6 (nếu bạn sử dụng ví dụ trên) và thế là đủ. Python 3.7 rất gần đây; Tôi nghi ngờ có một ứng dụng yêu cầu Python 3.7 rõ ràng, theo cách tương tự, tôi không biết bất kỳ ứng dụng nào chỉ hoạt động với Python 3.6. Nói cách khác. Bạn sẽ ổn thôi :)
ePi272314

2
Tôi đã cài đặt 3.7 và nhận được lỗi này: Error: python 3.7.0 is already installed To install 3.6.5_1, first run brew unlink python`` khi sử dụng 'câu trả lời ngắn'.
wuliwong

2
Cảm ơn bạn đã cung cấp liên kết cam kết trực tiếp cho 3.6.5. Bạn đã cứu tôi khỏi một tình huống vô vọng.
tsalaroth

4
Tôi biết điều này hơi cũ, nhưng tôi đang cố gắng tìm hiểu làm thế nào bạn có được liên kết đến công thức. Phiên bản hiện tại của 3.6 là 3.6.7, có cách tiếp cận đơn giản nào để tìm công thức này không?
chết

32

Như một bản cập nhật, khi làm

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

Bạn có thể gặp phải

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

Để bỏ qua nó, thêm --ignore-dependenciesđối số để cài đặt brew.

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
và sau đó bạn sẽ có một cơn ác mộng với sự phụ thuộc địa ngục ... như discourse.brew.sh/t/brew-install-python3-fails/1756/7
confiq

4
điều này đã không làm việc cho tôi lúc đầu; về cơ bản phải làm điều này: brew install --debug --ignore - Depencies raw.githubusercontent.com/Homebrew/homebrew-core/ , và một khi nó thất bại trong việc tạo html, chỉ cần bỏ qua lỗi bằng cách chọn 2). thất bại html / docs có thể sẽ cắn tôi sau này, nhưng bây giờ nó hoạt động tốt: nhún vai:
đậu

20

Những gì tôi đã làm là lần đầu tiên tôi cài đặt python 3.7

brew install python3
brew unlink python

sau đó tôi cài đặt python 3.6.5 bằng liên kết trên

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

Sau đó tôi chạy brew link --overwrite python. Bây giờ tôi có tất cả các con trăn trong hệ thống để tạo ra các môi trường ảo.

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

Để tạo môi trường ảo 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

Để tạo môi trường ảo 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
Mặc dù điều này có vẻ như sẽ rất tuyệt, nhưng nó không còn hoạt động nữa, kết quả là: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
Chờ

1
Nhìn kỹ câu trả lời của tôi, vì 3.6 bạn phải viết python3.6 -V. Bạn đã thực hiện python3 -Vhai lần đó là lý do tại sao bạn nhận được 3.7.3hai lần và mất tích3.6
Mian Asbat Ahmad

1
Đối với tôi, điều này ẩn python3.6dưới /usr/local/Cellar/python/3.6.5_1/bin. Khi tôi tạo một liên kết, nó hoạt động như bạn nói. Hệ thống tự quản lý trăn này dường như là một mảnh nhỏ của rube goldberg của một triệu lập trình viên mã hóa bằng chuyển động brownian.
Eric Leschinski

11

Tôi đã thử tất cả các câu trả lời ở trên để cài đặt Python 3.4.4. Việc cài đặt python đã hoạt động, nhưng PIP sẽ không được cài đặt và tôi không thể làm gì để nó hoạt động. Tôi đã sử dụng Mac OSX Mojave, gây ra một số vấn đề với zlib, openssl.

Những gì không làm:

  • Cố gắng tránh sử dụng Homebrew cho phiên bản trước được cung cấp bởi công thức Python hoặc Python3 .
  • Đừng cố biên dịch Python

Giải pháp:

  1. Tải xuống trình cài đặt macOS 64 bit hoặc trình cài đặt macOS 64 bit / 32 bit : https://www.python.org/doads/release/python-365/
  2. Ở bước trước, nó sẽ tải xuống Python 3.6.5 , ví dụ, nếu bạn muốn tải xuống Python 3.4.4 , thay thế trong url trên python-365 bằng python-344
  3. Tải xuống bấm vào tệp bạn đã tải xuống trình cài đặt GUI sẽ mở
  4. Nếu bạn đã tải xuống python-365 , sau khi cài đặt, để khởi chạy phiên bản python này, bạn sẽ nhập vào python365 thiết bị đầu cuối của mình , điều tương tự cho pip, nó sẽ là pip365

ps: Bạn không phải gỡ cài đặt phiên bản Python khác trên hệ thống của mình.


Biên tập:


Tôi tìm thấy một giải pháp tốt hơn nhiều, hoạt động trên MacOSX, Windows, Linux, v.v.

  1. Không có vấn đề gì nếu bạn đã cài đặt python hay chưa.
  2. Tải xuống Anaconda
  3. Sau khi cài đặt, trong loại thiết bị đầu cuối: conda init
  4. Trong thiết bị đầu cuối, tạo môi trường ảo với bất kỳ phiên bản python , ví dụ, tôi đã chọn 3.4.4:conda create -n [NameOfYour VirtualEnvironment] python=3.4.4
  5. Sau đó, trong thiết bị đầu cuối, bạn có thể kiểm tra tất cả môi trường ảo mà bạn đã tạo bằng lệnh: conda info --envs
  6. Sau đó, trong thiết bị đầu cuối, kích hoạt môi trường ảo bạn chọn với: conda activate [The name of your virtual environment that was shown with the command at step 5]

9

Tôi đã thử mọi cách nhưng không thể làm cho nó hoạt động. Cuối cùng tôi đã sử dụng pyenvvà nó hoạt động trực tiếp như một lá bùa.

Vì vậy, đã homebrewcài đặt, juste làm:

brew install pyenv
pyenv install 3.6.5

để quản lý virtualenvs:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

Xem pyenvpyenv-virtualenv để biết thêm.

EDIT (2019/03/19)

Tôi đã tìm thấy bằng cách sử dụng trình cài đặt pyenv dễ dàng hơn homebrew để cài đặt pyenv và pyenv-virtualenv direclty:

curl https://pyenv.run | bash

Để quản lý phiên bản python, trên toàn cầu:

pyenv global 3.6.5

hoặc cục bộ trong một thư mục nhất định:

pyenv local 3.6.5

Điều này thực sự không trực tiếp trả lời câu hỏi mà thay vào đó là phá vỡ nó bằng một virtualenvcách tiếp cận.
javadba

1
thực sự virtualenv là không cần thiết. pyenvcho phép bạn quản lý các phiên bản python mà không cần sử dụng venv
ClementWalter

5

Trong trường hợp bất cứ ai phải đối mặt với vấn đề pip như dưới đây

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

Nguyên nhân gốc là openssl 1.1 không hỗ trợ python 3.6 nữa. Vì vậy, bạn cần cài đặt phiên bản openssl 1.0 cũ

đây là giải pháp:

brew uninstall --ignore-dependencies openssl
brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

1

Để giải quyết vấn đề này homebrew, bạn có thể tạm thời sao lưu 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

Tôi không khuyên bạn nên sao lưu vĩnh viễn lõi nhà, 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 tap 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

0

Cách dễ nhất đối với tôi là cài đặt Anaconda: https://docs.anaconda.com/anaconda/install/

Ở đó tôi có thể tạo nhiều môi trường với các phiên bản Python khác nhau mà tôi muốn và chuyển đổi giữa chúng bằng một cú click chuột. Nó không thể được dễ dàng hơn.

Để cài đặt các phiên bản Python khác nhau, chỉ cần làm theo các hướng dẫn sau https://docs.conda.io/projects/conda/en/latest/user-guide/t Nhiệm/manage-python.html

Một môi trường phát triển mới với phiên bản Python khác đã được thực hiện trong vòng 2 phút. Và trong tương lai tôi có thể dễ dàng chuyển đổi qua lại.

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.