ฉันจะติดตั้ง Python 3 เวอร์ชันก่อนหน้าใน macOS โดยใช้ homebrew ได้อย่างไร


133

ฉันจะติดตั้ง Python 3 เวอร์ชันก่อนหน้าใน macOS โดยใช้ brew ได้อย่างไร

ด้วยคำสั่งbrew install pythonฉันได้รับ Python 3 เวอร์ชันล่าสุด (ปัจจุบันคือ v3.7.0) แต่ฉันต้องการเวอร์ชันสุดท้ายของ Python 3.6 (ปัจจุบันคือ 3.6.5)

ฉันได้อ่านเกี่ยวกับแพ็คเกจอื่นpyenvที่สามารถช่วยในการจัดการการติดตั้ง python ที่แตกต่างกันได้ แต่วิธีนี้ไม่เหมาะกับฉัน


5
สิ่งที่คุ้มค่าการสนับสนุนของ Homebrew สำหรับ Python หลายเวอร์ชันนั้นสุดยอดมากและกำลังแย่ลงเรื่อย ๆ ฉันอยากจะแนะนำให้คุณหลีกเลี่ยงการใช้ Homebrew เพื่อติดตั้ง Python เลย Python.org มีแพ็คเกจการติดตั้ง macOS สำหรับ Python เวอร์ชันต่างๆซึ่งสามารถติดตั้งเคียงข้างกันได้ (และเคียงข้างกันด้วยการติดตั้ง Homebrew Python หากคุณต้องการ) ไม่ว่าจะใช้แพ็คเกจเหล่านั้นหรือใช้เครื่องมือเช่นpyenvจะช่วยให้คุณประหยัดความเศร้าได้ในระยะยาว
Daniel Pryden

คำตอบ:


256

คำตอบสั้น ๆ

ในการติดตั้ง 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

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

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

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


2
สิ่งนี้จะส่งผลกระทบหรือโต้ตอบกับแพ็คเกจใน Homebrew ที่อาศัยตัวแปล python3 เริ่มต้นอย่างไร
Telemachus

1
ไม่ว่าในกรณีใดแอปพลิเคชันที่ขึ้นอยู่กับ Python (ติดตั้งด้วย brew หรือไม่) จะมองหา python3 ที่ปฏิบัติการได้ในเส้นทางของแอปพลิเคชันและคุณจะมี python3 ชี้ไปที่ python3.6 ดังนั้น Python 3 เริ่มต้นของคุณจะเป็น 3.6 (หากคุณใช้ตัวอย่างด้านบน) และนั่นก็เพียงพอแล้ว Python 3.7 เป็นรุ่นล่าสุด ฉันสงสัยว่ามีแอปพลิเคชันที่ต้องใช้ Python 3.7 อย่างชัดเจนในทำนองเดียวกันฉันไม่รู้จักแอปพลิเคชันใด ๆ ที่ใช้งานได้กับ Python 3.6 เท่านั้น กล่าวอีกนัยหนึ่ง คุณจะสบายดี :)
ePi272314

2
ฉันติดตั้ง 3.7 แล้วและได้รับข้อผิดพลาดนี้: Error: python 3.7.0 is already installed To install 3.6.5_1, first run ชงยกเลิกการลิงก์ python `` เมื่อใช้ 'คำตอบสั้น ๆ '
wuliwong

2
ขอบคุณที่ให้ลิงค์การคอมมิตโดยตรงสำหรับ 3.6.5 คุณช่วยฉันจากสถานการณ์ที่สิ้นหวัง
tsalaroth

4
ฉันรู้ว่านี่เก่ากว่าเล็กน้อย แต่ฉันพยายามดิ้นรนเพื่อหาว่าคุณได้รับลิงก์ไปยังสูตรอย่างไร เวอร์ชันปัจจุบันของ 3.6 คือ 3.6.7 มีวิธีง่ายๆในการค้นหาสูตรนี้หรือไม่?
diek

32

เป็นการอัปเดตเมื่อทำ

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 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
แล้วคุณจะต้องฝันร้ายกับนรกแห่งการพึ่งพา ... เช่นdiscourse.brew.sh/t/brew-install-python3-fails/1756/7
confiq

4
สิ่งนี้ไม่ได้ผลสำหรับฉันในตอนแรก โดยพื้นฐานแล้วต้องทำสิ่งนี้: brew install --debug --ignore -dependencies raw.githubusercontent.com/Homebrew/homebrew-core/… และเมื่อทำ html ล้มเหลวให้ละเว้นข้อผิดพลาดโดยเลือก 2) ความล้มเหลวของ html / docs อาจจะกัดฉันในภายหลัง แต่ตอนนี้มันใช้งานได้ดี: ยัก:
ถั่ว

21

สิ่งที่ฉันทำอันดับแรกคือฉันติดตั้ง 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~ $ 

1
แม้ว่าจะดูเหมือนว่ามันจะดี แต่ก็ใช้งานไม่ได้อีกต่อไปผลลัพธ์คือ: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
เวเฟอร์

1
ดูคำตอบของฉันอย่างใกล้ชิดสำหรับ 3.6 คุณต้องเขียน python3.6 -V คุณได้ทำpython3 -Vสองครั้งนั่นคือสาเหตุที่คุณได้รับ3.7.3สองครั้งและหายไป3.6
Mian Asbat Ahmad

1
สำหรับผมหนังนี้ภายใต้python3.6 /usr/local/Cellar/python/3.6.5_1/binเมื่อฉันสร้างลิงค์มันก็ใช้ได้ตามที่คุณพูด ระบบการจัดการตัวเองของหลามนี้ดูเหมือนจะเป็นเศษส่วนของโกลด์เบิร์กที่มีโปรแกรมเมอร์นับล้านคนที่เขียนโค้ดโดยการเคลื่อนไหวสีน้ำตาล
Eric Leschinski

11

ฉันลองทำตามคำตอบทั้งหมดข้างต้นเพื่อติดตั้ง Python 3.4.4 การติดตั้ง python ใช้งานได้ แต่ PIP จะไม่ถูกติดตั้งและฉันไม่สามารถทำอะไรได้เพื่อให้มันใช้งานได้ ฉันใช้ Mac OSX Mojave ซึ่งทำให้เกิดปัญหากับ zlib openssl

สิ่งที่ไม่ควรทำ:

  • พยายามที่จะหลีกเลี่ยงการใช้ Homebrew สำหรับรุ่นก่อนหน้านี้ที่ได้รับจากสูตรหลามหรือPython3
  • อย่าพยายามรวบรวมPython

สารละลาย:

  1. ดาวน์โหลดตัวติดตั้ง macOS 64 บิตหรือตัวติดตั้งmacOS 64 บิต / 32 บิต : https://www.python.org/downloads/release/python-365/
  2. ในขั้นตอนก่อนหน้านี้จะดาวน์โหลดPython 3.6.5เช่นคุณต้องการดาวน์โหลดPython 3.4.4แทนที่ใน url ด้านบนpython-365โดยpython-344
  3. ดาวน์โหลดคลิกที่ไฟล์ที่คุณดาวน์โหลดโปรแกรมติดตั้ง GUI จะเปิดขึ้น
  4. หากคุณดาวน์โหลดpython-365หลังจากติดตั้งเพื่อเปิด python เวอร์ชันนี้คุณจะพิมพ์ใน terminal python365ซึ่งเป็นสิ่งเดียวกันสำหรับ pip ซึ่งจะเป็นpip365

ps: คุณไม่จำเป็นต้องถอนการติดตั้ง Python เวอร์ชันอื่นในระบบของคุณ


แก้ไข:


ฉันพบวิธีแก้ปัญหาที่ดีกว่ามากซึ่งใช้ได้กับ MacOSX, Windows, Linux และอื่น ๆ

  1. ไม่สำคัญว่าคุณได้ติดตั้ง python ไว้แล้วหรือไม่
  2. ดาวน์โหลดAnaconda
  3. เมื่อติดตั้งแล้วในประเภทเทอร์มินัล: conda init
  4. ในเทอร์มินัลสร้างสภาพแวดล้อมเสมือนจริงด้วยpython เวอร์ชันใดก็ได้เช่นฉันเลือก 3.4.4:conda create -n [NameOfYour VirtualEnvironment] python=3.4.4
  5. จากนั้นในเทอร์มินัลคุณสามารถตรวจสอบสภาพแวดล้อมเสมือนจริงทั้งหมดที่คุณสร้างขึ้นด้วยคำสั่ง: conda info --envs
  6. จากนั้นในเทอร์มินัลเปิดใช้งานสภาพแวดล้อมเสมือนที่คุณเลือกด้วย: conda activate [The name of your virtual environment that was shown with the command at step 5]

10

ฉันได้ลองทุกอย่างแล้ว แต่ไม่สามารถใช้งานได้ ในที่สุดฉันก็ได้ใช้pyenvและได้ผลโดยตรงราวกับมีเสน่ห์

ดังนั้นเมื่อhomebrewติดตั้งแล้วให้ทำ:

brew install pyenv
pyenv install 3.6.5

ในการจัดการอัจฉริยะ:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

ดูpyenvและpyenv-Virtualenvสำหรับข้อมูลเพิ่มเติม

แก้ไข (2019/03/19)

ฉันพบว่าการใช้ตัวติดตั้ง pyenvง่ายกว่า homebrew ในการติดตั้ง pyenv และ pyenv-Virtualenv direclty:

curl https://pyenv.run | bash

ในการจัดการเวอร์ชัน python ทั่วโลก:

pyenv global 3.6.5

หรือภายในไดเร็กทอรีที่กำหนด:

pyenv local 3.6.5

นี่ไม่ใช่การตอบคำถามโดยตรง แต่เป็นการหลีกเลี่ยงด้วยvirtualenvวิธีการแทน
javadba

1
จริงๆแล้ว Virtualenv ไม่จำเป็น pyenvช่วยให้คุณจัดการเวอร์ชัน python โดยไม่จำเป็นต้องใช้ venv
ClementWalter

6

ในกรณีที่ใครประสบปัญหา pip ด้านล่าง

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

1

ในการแก้ปัญหานี้homebrewคุณสามารถ backdate ชั่วคราว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 อย่างถาวรเนื่องจากคุณจะพลาดแพตช์ความปลอดภัย แต่มีประโยชน์สำหรับการทดสอบ

คุณยังสามารถแยกสูตร homebrew เวอร์ชันเก่าลงในการแตะของคุณเอง (tap_owner / tap_name) โดยใช้brew extractคำสั่ง:

brew extract python tap_owner/tap_name --version=3.6.5

0

วิธีที่ง่ายที่สุดสำหรับฉันคือการติดตั้ง 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 นาที และในอนาคตฉันสามารถสลับไปมาได้อย่างง่ายดาย

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