ฉันจะใช้ Brew ที่ติดตั้ง Python เป็น Python เริ่มต้นได้อย่างไร


188

ฉันพยายามเปลี่ยนเป็น Homebrew (หลังจากใช้ fink และ macport) บน Mac OS X 10.6.2 ฉันติดตั้ง python 2.7 แล้ว

brew install python 

ปัญหาคือว่าตรงกันข้ามกับ Macport ดูเหมือนว่าไม่มียูทิลิตี้ python_select และ mac python เริ่มต้นของฉันจะเป็นค่าเริ่มต้นเสมอ

which python

ให้ฉัน

/usr/bin/python

และ/usr/bin/pythonไม่ใช่ symlink

ฉันจะทำอย่างไรเพื่อให้รสชาติการชงหลามเป็นงูหลามเริ่มต้นของฉัน


14
Homebew ไม่แสดงเงาการติดตั้งระบบของ python อีกต่อไป คุณสามารถทำได้: export PATH="/usr/local/opt/python/libexec/bin:$PATH"แหล่งที่มา: discourse.brew.sh/t/…
จอร์จ

3
ฉันลองคำตอบทั้งหมดที่กล่าวถึง / usr / local / bin มาก่อน / usr / bin ใน $ PATH ของฉัน ฉันพยายามชงลิงก์และยกเลิกการเชื่อมโยงหมอชงไม่ได้รายงานปัญหา / usr / bin ว่าก่อนหน้านี้ / usr / local / bin มีปัญหา ยังเมื่อฉันทำหลามที่ฉันได้รับ / usr / bin / python และไม่ได้ติดตั้งกับชง
Ujwal Ratra

ลอง ... python2 ไหน
เฟรเซอร์

คำตอบ:


117

ในขณะที่คุณใช้ Homebrew คำสั่งต่อไปนี้ให้ภาพที่ดีกว่า:

brew doctor

เอาท์พุท:

==> / usr / bin เกิดขึ้นก่อน / usr / local / bin ซึ่งหมายความว่าโปรแกรมที่ระบบจะใช้แทนการใช้โดย Homebrew นี่เป็นปัญหาหากคุณเช่น ชงติดตั้ง Python

พิจารณาแก้ไข. bash_profile ของคุณเพื่อวาง: / usr / local / bin ข้างหน้า / usr / bin ใน $ PATH ของคุณ


4
ตรวจสอบให้แน่ใจว่าคุณไม่มี / user / local / bin สองครั้งในเส้นทางของคุณ ด้วยเหตุผลบางอย่างใน PATH ของฉันมันปรากฏขึ้นทั้งก่อนและหลัง / usr / bin และมันทำให้ฉันบ้า
vinaut

1
หลายโปรแกรมใช้ / usr / bin / python ในส่วนหัวทำให้นี่ไม่ใช่โซลูชันที่ทำงานได้
mschuett

5
สำหรับการชงใน High Sierra เท่านั้นpython2จะอยู่ใน / usr / local / bin สำหรับ just python; ตั้ง export PATH="/usr/local/opt/python/libexec/bin:$PATH"ใน~/.bash_profile
tormodatt

86

ดู: วิธีการเชื่อมโยงไพ ธ อนใน Homebrew ได้อย่างไร

$ brew link --overwrite python
Linking /usr/local/Cellar/python/2.7.3... 28 symlinks created
$ which python
/usr/local/bin/python

11
ทำไมสิ่งนี้ไม่เกิดขึ้นเมื่อฉันติดตั้งหลาม
เบ็นเวสต์

4
@BenWest เพราะ python3 ตอนนี้คุณจะได้รับ python2 แทนที่จะเป็น python
georgexsh

1
ฉันไม่ได้เปิดใช้งาน
theonlygusti

1
ในกรณีของฉันฉันจำเป็นต้องรีสตาร์ทเครื่องหลังจากรันคำสั่งนี้ (ตามที่ระบุไว้โดยคำตอบของ Martijn Courteaux )
jkmartindale

2
ลิงค์นี้ python @ 2 สำหรับฉัน
Andrew B.

63

แก้ไขด่วน:

  1. เปิด /etc/paths
  2. เปลี่ยนลำดับของบรรทัด (ลำดับความสำคัญสูงสุดอยู่ด้านบน)

ในกรณีของฉัน/etc/pathsดูเหมือนว่า:

/usr/local/bin
/usr/local/sbin
/usr/bin
/bin
/usr/sbin
/sbin

หากคุณต้องการทราบเพิ่มเติมเกี่ยวกับเส้นทางใน OSX ฉันพบว่าบทความนี้มีประโยชน์มาก:

http://muttsnutts.github.com/blog/2011/09/12/manage-path-on-mac-os-x-lion/


1
ขอบคุณคำตอบทั้งหมดข้างต้นไม่ได้แก้ปัญหาของฉัน แต่คุณทำ! ขอบคุณมาก!
ฌอน

7
ปัญหานี้คือมันเปลี่ยนให้กับผู้ใช้ทั้งหมด: /, IMO จะเป็นการดีกว่าที่จะเปลี่ยนสิ่งที่เฉพาะเจาะจงมากขึ้น
Randall Hunt

@ RandHunt ชอบอะไรและอย่างไร
Mike Kormendy

63

ตามที่ผู้แนะนำ homebrew ติดตั้งเองแนะนำให้เพิ่มลงในของคุณ.bashrcหรือ.zshrc:

export PATH="/usr/local/opt/python/libexec/bin:$PATH"

11
นี่เป็นวิธีที่ถูกต้องใน High Sierra โหวต!
tormodatt

MacOS จะใช้ค่าเริ่มต้นไปที่เทอร์มินัล zsh ดังนั้นโอกาสที่มันจะเป็น.zshrcไฟล์ไม่ใช่.bashrcไฟล์ที่ต้องเปลี่ยน
user394430

1
ไม่มีคำตอบอื่นใดที่เหมาะกับฉันยกเว้นสิ่งนี้! ใช้ macOS Catalina ที่นี่ ขอบคุณ!
Ali Akbar

นี่คือคำตอบที่ถูกต้อง
HarshMarshmallow

44

ฉันทำ "Brew install python" สำหรับ OSX High Sierra แล้ว $PATHมี/usr/local/binก่อนเส้นทางอื่น ๆ แต่ยังคงwhich pythonได้รับการชี้ไปหลามของระบบ

เมื่อฉันมองลึกฉันพบว่าไม่มี python ที่สามารถใช้งาน/usr/local/binได้ python2ปฏิบัติการการตั้งชื่อ ในการแก้ไขปัญหานี้ให้สร้างลิงก์สัญลักษณ์ที่pythonชี้ไปที่python2:

/usr/local/bin $: ln -s python2 python


4
ยืนยันสิ่งนี้เพื่อแก้ไขปัญหาใน High Sierra
RandomDeduction

คุณคือฮีโร่ของฉัน ไม่อยากจะเชื่อว่าฉันไม่ได้ตระหนักถึงวิธีการแก้ปัญหานี้!
Smokin Joe

3
ต้องรีสตาร์ทเครื่องเพื่อทำการปรับใช้
lexa-b

3
$ cd / usr / local / bin $ ln -s python3 python
Pnemonic

1
และฉันสมมติว่า sym-link pip ไปที่ pip3 (หรือ pip2)
alexP_Keaton

23

Homebrew ไม่ได้แทนที่สิ่งต่าง ๆ ใน "/ usr / bin" คุณเพียงต้องการใส่ "/ usr / local / bin" ล่วงหน้า "/ usr / bin" ในพา ธ ของคุณจากนั้น "python" ที่จะให้ "/ usr / local / bin / python"

การแทนที่ / usr / bin / python (หรือ / usr / bin / ruby) นั้นไม่มีการอ้างอิงสูง


2
แต่มันไม่ได้!
theonlygusti

22

pythonสูตรใช้ตอนนี้python3(v3.6.5 ก่อน) ชงจะเชื่อมโยงไดเรกทอรี :

/usr/local/opt/python -> ../Cellar/python/3.6.5

มันจะเชื่อมโยงไบนารี :

/usr/local/bin/python3 -> ../Cellar/python/3.6.5/bin/python3

หากคุณยังจำเป็นต้องใช้python2.xให้ใช้:

brew install python@2

หากต้องการใช้ homebrew pythonให้ใส่ไดเรกทอรีใน PATH เพื่อทุบตี:

export PATH="/usr/local/opt/python/libexec/bin:$PATH"

สำหรับปลา:

set -x PATH /usr/local/opt/python/libexec/bin $PATH

บันทึก:

  1. การทำเช่นนี้จะทำให้ระบบเริ่มต้นเป็นเงา python
  2. homebrew ใช้เพื่อเชื่อมโยง python กับ/usr/local/share/pythonรุ่นที่เก่ากว่า

นี่คือเคล็ดลับสำหรับฉัน โดยค่าเริ่มต้นชงติดตั้งpython3ในเส้นทางของคุณ - ไม่ใช่ผู้บริหารที่เรียกว่าpython.. โดยเฉพาะการอ้างอิง/usr/local/opt/python/libeexec/binล่วงหน้าของไดเรกทอรีอื่น ๆ ในเส้นทางของฉันเรียงลำดับออก
cam8001

13

ปรับเปลี่ยน $ PATH เพิ่มใน bashrc หรือ bash_profile ของคุณ:

export PATH=/usr/local/bin:/usr/local/sbin:~/bin:$PATH

เพิ่มเติมคลิกที่นี่: ปัญหา # 89791


บรรณาธิการ "PyCharm" ของฉันใช้ ~ / .bashrc และฉันไม่สามารถทำให้ python ของ Brew ทำงานได้จนกว่าอัญมณีเม็ดเล็กนี้ ขอบคุณ @Aben
JamesDeHart

10

คุณต้องแก้ไขตัวแปรสภาพแวดล้อม PATH ของคุณเพื่อให้แน่ใจว่าทุกครั้งที่มีการค้นหา homebrew python อยู่ก่อน / usr / bin คุณสามารถตั้งค่าต่างๆในเชลล์ของคุณเพื่อให้ตัวแปรเช่น PYTHON ตั้งเป็นไพ ธ อนและการโทรที่คุณต้องการ$PYTHONมากกว่าpythonจาก command line

นอกจากนี้ตามที่ระบุไว้ในโปสเตอร์อื่น (และโดยเฉพาะอย่างยิ่งใน mac) อย่าไปยุ่งกับงูหลามใน / usr / bin เพื่อชี้ไปที่งูหลามตัวอื่นติดตั้ง คุณแค่ถามถึงปัญหาถ้าคุณทำ


9

ฉันทำbrew install pythonแล้วฉัน$PATHก็ดี แต่ก็ยังwhich pythonให้ติดตั้งระบบแก่ฉัน รีสตาร์ทเครื่องซ่อม


1
นี่คือทั้งหมดที่ฉันต้องทำ ฉันไม่แน่ใจว่าจะทำเช่นนี้เมื่อใด ดูเหมือนว่าจะดำเนินการbrew install pythonแล้วรีสตาร์ท terminal และไม่มีอะไรอีก? ไม่จำเป็นต้องbrew unlink& brew link?
Con Antonakos

หลังจากติดตั้ง python โดยใช้ brew แล้ว "ซึ่ง python" ให้เส้นทางของ python ในระบบที่ถูกต้องแก่ฉัน แต่คำสั่ง "python" ระบุว่าเป็นระบบที่ติดตั้งเพียงเครื่องเดียว รีสตาร์ทสถานีซ่อมมัน
มิเชล

2
รีสตาร์ทเครื่องไม่จำเป็นต้องลองhash -r
georgexsh

JFC ฉันหลงทางจนกระทั่งฉันอ่านสิ่งนี้ ฉันทำไปแล้วbrew unlink & brew linkหลายครั้ง จำเป็นต้องรีสตาร์ทเครื่องเท่านั้น
Dominic

6

pythonตอนนี้ชี้ไปที่python3ถ้าคุณต้องการให้python 2ทำ: brew install python@2แล้วในไฟล์. zshrc หรือ. bashrc ของคุณ export PATH="/usr/local/opt/python@2/libexec/bin:$PATH" ตอนนี้pyhon --version= Python 2.7.14 และpython3 --version= Python 3.6.4 นั่นเป็นพฤติกรรมที่ฉันเคยเห็นใน terminal ของฉัน


5

ฉันเชื่อว่ามีวิธีที่จะทำให้การเริ่มต้นของ Homebrew Python แต่ในความคิดของฉันวิธีที่เหมาะสมในการแก้ปัญหาไม่ได้ยุ่งกับเส้นทางของระบบ Python: มันจะดีกว่าที่จะสร้าง virtualenv ที่ Homebrew Python จะเริ่มต้น (โดยใช้ virtualenv - - ตัวเลือกหลาม) การใช้เครื่องมือเช่นpython_selectนั้นเป็นความคิดที่ดีเสมอ


2

ใช้ pyenv แทนเพื่อติดตั้งและสลับระหว่างเวอร์ชันของ Python ฉันใช้ rbenv มาหลายปีซึ่งทำสิ่งเดียวกัน แต่สำหรับ Ruby ก่อนหน้านั้นมันเป็นรุ่นจัดการนรก

Consult หน้า GitHub pyenv ของสำหรับคำแนะนำการติดตั้ง โดยทั่วไปจะเป็นดังนี้: - ติดตั้ง pyenv โดยใช้ homebrew brew install pyenv - เพิ่มฟังก์ชั่นท้ายสคริปต์เริ่มต้นเชลล์ของคุณเพื่อให้ pyenv สามารถทำมันได้อย่างมหัศจรรย์echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

  • ใช้ pyenv เพื่อติดตั้ง Python เวอร์ชันต่าง ๆ ที่คุณต้องการ pyenv install 3.7.7.
  • ตั้งค่ารุ่นเริ่มต้น (ทั่วโลก) เป็นรุ่นทันสมัยที่คุณเพิ่งติดตั้ง pyenv global 3.7.7.
  • pyevn localถ้าคุณทำงานในโครงการที่จำเป็นต้องใช้รุ่นที่แตกต่างกันของงูหลามดูเป็น สิ่งนี้จะสร้างไฟล์ในโฟลเดอร์ของโครงการที่ระบุเวอร์ชันของหลาม Pyenv จะดูแทนที่รุ่น python ทั่วโลกด้วยรุ่นในไฟล์นั้น

1

แค่ทำ:

brew install python
brew link python

หลังจากทำเช่นนั้นเพิ่มสิ่งนี้ใน bashrc หรือ bash_profile ของคุณ:

alias python='/usr/local/bin/python2'

สนุก!


ดูเหมือนคุณจะเจอปัญหาแบบเดียวกับที่ฉันทำ การเชื่อมโยงทั้งหมดที่ชงสร้างแม้จะมีlinkคำสั่งในคำตอบที่นี่ใน/usr/local/binมีการแทนpython2 pythonการใช้นามแฝงเพื่อแก้ไขสิ่งนี้ดูเหมือนจะเป็นความคิดที่ไม่ดี แต่ฉันยังไม่พบอะไรที่ดีกว่านี้
Patrick M

แทนที่จะเป็นนามแฝงฉันเพิ่งคัดลอกcp /usr/local/bin/python2 /usr/local/bin/pythonและดูเหมือนว่าจะทำงานได้ดี นี่เป็นการทำงานที่น่าเกลียดหรือเปล่า?
kingb12

1

เพิ่ม /usr/local/opt/python/libexec/binของคุณอย่างชัดเจน.bash_profile:

export PATH="/usr/local/opt/python/libexec/bin:$PATH"

หลังจากนั้นควรทำงานอย่างถูกต้อง


1

หากคุณเป็นหอย

echo 'set -g fish_user_paths "/usr/local/opt/python/libexec/bin" $fish_user_paths' >> ~/.config/fish/config.fish

0

คุณสามารถแก้ไข / etc / path นี่คือของฉัน:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

จากนั้นเพิ่ม symlink สำหรับเวอร์ชันหลาม ในกรณีของฉัน

$ cd /usr/local/bin
$ ln -s python3 python

Voila!


0

ตั้งแต่ High Sierra คุณต้องใช้:

sudo chown -R $(whoami) $(brew --prefix)/*

นี่เป็นเพราะ/usr/localไม่สามารถถูกแช่ง


-7

ไม่ทราบว่าคุณหมายถึงอะไรกับ Python เริ่มต้น ฉันคิดว่ามันเป็นการปฏิบัติที่ไม่ดีในการแทนที่ตัวแปล Python ของระบบด้วยเวอร์ชันอื่น ฟังก์ชันการทำงานของระบบอาจขึ้นอยู่กับระบบ Python และโมดูลที่เฉพาะเจาะจงหรือรุ่น Python ที่เจาะจง แทนที่จะติดตั้งการติดตั้ง Python แบบกำหนดเองของคุณในสถานที่ที่ปลอดภัยและปรับ $ PATH ของคุณตามต้องการเพื่อโทรหาคุณ Python ผ่านการค้นหาเส้นทางแทนที่จะค้นหา Python เริ่มต้น


5
ไม่มีความเสี่ยงใน os x ที่จะให้ python ของ homebrew มาก่อน python ของระบบในพา ธ นี่เป็นเรื่องธรรมดามาก
Steven Noble

3
นอกจากนี้ความต้องการใช้ Python ที่ไม่ใช่ของ Apple นั้นเป็นของจริง ฉันพยายามรับ matplotlib, NumPy และ SciPy และทำงานด้วย Python 'default' (aka Apple) มันเกี่ยวกับการรักษา 32/64 บิตที่แยกส่วนขยายออกจากกัน ดีใจมากที่ได้ Brew ที่ดีมาแทน และโดยค่าเริ่มต้น ('brew install python') Brew ทำสิ่งที่คุณหมายถึงอย่างแท้จริง - มันติดตั้ง Python ตัวที่สองไปยังโครงสร้างที่แยกจากกันไม่ใช่การเอาชนะเส้นทาง
akauppi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.