Làm cách nào để sử dụng brew được cài đặt Python làm Python mặc định?


185

Tôi cố gắng chuyển sang Homebrew (sau khi sử dụng fink và macport) trên Mac OS X 10.6.2. Tôi đã cài đặt python 2.7 với

brew install python 

Vấn đề là, trái với Macport, dường như không có tiện ích python_select và python mac mặc định của tôi luôn được mặc định

which python

đưa cho tôi

/usr/bin/python

/usr/bin/pythonkhông phải là một liên kết tượng trưng

Làm thế nào tôi có thể làm để làm cho hương vị python brew là python mặc định của tôi?


14
Homebew không còn phủ bóng lên hệ thống cài đặt python. Bạn có thể làm: export PATH="/usr/local/opt/python/libexec/bin:$PATH"nguồn: discourse.brew.sh/t/...
George

3
Tôi đã thử tất cả các câu trả lời được đề cập, / usr / local / bin xuất hiện trước / usr / bin trong $ PATH của tôi. Tôi đã thử liên kết brew và hủy liên kết, bác sĩ brew không báo cáo / usr / bin là trước / usr / local / bin một vấn đề. Tuy nhiên, khi tôi thực hiện python, tôi nhận được / usr / bin / python và không phải là cái được cài đặt với brew.
Ujwal Ratra

thử ... mà python2
Fraser

Câu trả lời:


117

Khi bạn đang sử dụng Homebrew, lệnh sau sẽ cho hình ảnh rõ hơn:

brew doctor

Đầu ra:

==> / usr / bin xảy ra trước / usr / local / bin Điều này có nghĩa là các chương trình do hệ thống cung cấp sẽ được sử dụng thay vì các chương trình do Homebrew cung cấp. Đây là một vấn đề nếu bạn ví dụ. pha cài đặt Python.

Cân nhắc chỉnh sửa .bash_profile của bạn để đặt: / usr / local / bin trước / usr / bin trong $ PATH của bạn.


4
Đảm bảo rằng bạn không có / user / local / bin TWICE trong đường dẫn của bạn. Vì một số lý do trong PATH của tôi, nó xuất hiện cả trước và sau / usr / bin và nó khiến tôi phát điên.
vinaut

1
nhiều chương trình sử dụng / usr / bin / python trong tiêu đề làm cho điều này không phải là một giải pháp khả thi.
mschuett 7/07/2015

5
chỉ dành cho bia ở High Sierra python2là trong / usr / local / bin, chỉ python; thiết lập export PATH="/usr/local/opt/python/libexec/bin:$PATH"trong~/.bash_profile
tormodatt

86

Xem: Làm thế nào để symlink python trong Homebrew?

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

10
Tại sao điều này không xảy ra khi tôi cài đặt python?
Ben West

4
@BenWest vì python3, bây giờ bạn nhận được python2 chứ không phải python.
georgexsh

1
Tôi không kích hoạt nó.
theonlygusti

1
Trong trường hợp của tôi, tôi cần khởi động lại thiết bị đầu cuối sau khi chạy lệnh này (như được lưu ý bởi câu trả lời của Martijn Courteaux )
jkmartindale

2
liên kết này python @ 2 cho tôi
Andrew B.

63

Khắc phục nhanh:

  1. Mở /etc/paths
  2. Thay đổi thứ tự của các dòng (ưu tiên cao nhất trên đầu trang)

Trong trường hợp của tôi /etc/pathstrông như:

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

Nếu bạn muốn biết thêm về các đường dẫn trong OSX, tôi thấy bài viết này khá hữu ích:

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


1
Cảm ơn bạn, tất cả các câu trả lời trên đã giải quyết vấn đề của tôi, nhưng bạn đã làm! Cảm ơn bạn rất nhiều!
Sean

7
vấn đề với điều này là nó thay đổi nó cho tất cả người dùng: /, IMO tốt hơn là thay đổi một cái gì đó cụ thể hơn.
Randall Hunt

@RandallHunt thích gì và như thế nào?
Mike Kormendy

61

Theo đề xuất của chính trình cài đặt homebrew, hãy nhớ thêm phần này vào .bashrchoặc .zshrc:

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

11
Đây là phương pháp đúng trên High Sierra. Bỏ phiếu lên!
tormodatt

MacOS mặc định là thiết bị đầu cuối zsh, vì vậy rất có thể đó là .zshrctệp chứ không phải .bashrctệp cần thay đổi.
dùng394430

1
Không có câu trả lời nào khác làm việc cho tôi ngoại trừ điều này! chạy macOS Catalina tại đây. Cảm ơn!
Ali Akbar

44

Tôi đã "ủ cài đặt python" cho OSX High Sierra. Các $PATHthăm /usr/local/bintrước bất kỳ con đường khác nhưng vẫnwhich python được trỏ đến python của hệ thống.

Khi tôi nhìn sâu hơn, tôi thấy rằng không có con trăn nào thi hành được /usr/local/bin. Việc thực thi được đặt tên python2. Để khắc phục sự cố này, hãy tạo một liên kết tượng trưng pythonchỉ đến python2:

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


4
Xác nhận điều này khắc phục sự cố trên High Sierra
RandomDedraction

Bạn là người hùng của tôi. Không thể tin rằng tôi đã không nhận ra giải pháp này!
Smokin Joe

3
Cũng cần khởi động lại thiết bị đầu cuối để áp dụng
lexa-b

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

1
và tôi giả sử cũng có liên kết sym-pip với pip3 (hoặc pip2)?
alexP_Keaton

23

Homebrew KHÔNG thay thế công cụ trong "/ usr / bin". Bạn sẽ chỉ muốn đặt "/ usr / local / bin" trước "/ usr / bin" trong đường dẫn của mình, sau đó "python" sẽ cung cấp cho bạn "/ usr / local / bin / python".

Thay thế / usr / bin / python (hoặc / usr / bin / ruby) rất không được khuyến khích.


1
Nhưng nó không!
theonlygusti

22

pythonbây giờ công thức sử dụng python3(v3.6.5), brew sẽ liên kết thư mục :

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

nó cũng sẽ liên kết nhị phân :

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

Nếu bạn vẫn cần sử dụng python2.x, hãy sử dụng:

brew install python@2

Để sử dụng homebrew's python, chỉ cần đặt thư mục của nó trong PATH, cho bash:

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

cho cá:

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

Ghi chú:

  1. làm điều này sẽ phủ bóng phiên bản mặc định của hệ thống python
  2. homebrew được sử dụng để liên kết python đến /usr/local/share/pythontrong các phiên bản cũ hơn.

Đây là mẹo cho tôi. Theo mặc định, brew cài đặt python3trong đường dẫn của bạn - không phải là một exec được gọi python.. Cụ thể là tham chiếu /usr/local/opt/python/libeexec/bintrước các thư mục khác trong đường dẫn của tôi sắp xếp mọi thứ.
cam8001

13

Sửa đổi $ PATH của bạn, Thêm phần này vào bashrc hoặc bash_profile của bạn:

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

bấm vào đây: Vấn đề # 89791


Trình soạn thảo "PyCharm" của tôi đã sử dụng ~ / .bashrc và tôi không thể để con trăn của hãng bia hoạt động cho đến khi viên ngọc nhỏ này. Cảm ơn @Aben
JamesDeHart

10

Bạn cần chỉnh sửa biến môi trường PATH của mình để đảm bảo bất cứ nơi nào con trăn homebrew được tìm thấy trước / usr / bin. Bạn cũng có thể thiết lập mọi thứ trong cấu hình shell của mình để có một biến như PYTHON được đặt thành phiên bản python mong muốn của bạn và gọi $PYTHONthay vì pythontừ dòng lệnh.

Ngoài ra, như một poster khác đã nêu (và đặc biệt là trên mac) KHÔNG gây rối với python trong / usr / bin để trỏ nó đến một cài đặt python khác. Bạn chỉ yêu cầu rắc rối nếu bạn làm.


9

Tôi đã làm brew install python, của tôi $PATHlà tốt, nhưng vẫn, which pythoncho tôi hệ thống cài đặt một. Khởi động lại thiết bị đầu cuối đã sửa nó.


1
Đây là tất cả những gì tôi cần làm. Tôi không chắc chắn khi nào để làm điều này, mặc dù. Nghe có vẻ như chỉ thực hiện brew install pythonvà sau đó, khởi động lại thiết bị đầu cuối, và không có gì khác? Không cần brew unlink& brew link?
Con Antonakos

Ngay sau khi cài đặt python bằng brew, "python" cho tôi đường dẫn python cục bộ chính xác, nhưng lệnh "python" chỉ ra rằng đó là hệ thống được cài đặt. Khởi động lại thiết bị đầu cuối đã sửa nó.
Michelle

2
khởi động lại thiết bị đầu cuối là không cần thiết, hãy thửhash -r
georgexsh

JFC, tôi đã mất trí cho đến khi tôi đọc nó. Tôi đã làm brew unlink & brew linknhiều lần. Chỉ cần khởi động lại thiết bị đầu cuối
Dominic

6

pythonbây giờ trỏ đến python3, nếu bạn cần python 2thì làm: brew install python@2và sau đó trong tệp .zshrc hoặc .bashrc của bạn export PATH="/usr/local/opt/python@2/libexec/bin:$PATH" Bây giờ, pyhon --version= Python 2.7,14 và python3 --version= Python 3.6.4. Đó là hành vi tôi thường thấy trong thiết bị đầu cuối của mình.


5

Tôi tin rằng có những cách để làm cho python homebrew mặc định, nhưng theo tôi, cách thích hợp để giải quyết vấn đề là không gây rối với các đường dẫn python của hệ thống: tốt hơn là tạo một virtualenv trong đó python homebrew sẽ được mặc định (bằng cách sử dụng virtualenv - tùy chọn -python). Sử dụng các công cụ như python_selecthầu như luôn luôn là một ý tưởng tồi.


1

Cứ làm đi:

brew install python
brew link python

Sau khi làm điều đó, hãy thêm nó vào bashrc hoặc bash_profile của bạn:

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

Thưởng thức!


Có vẻ như bạn gặp phải vấn đề tương tự tôi đã làm. Tất cả các liên kết mà brew tạo ra, ngay cả với các linklệnh trong câu trả lời ở đây, /usr/local/binlà để python2thay thế python. Sử dụng một bí danh để giải quyết vấn đề này có vẻ như là một ý tưởng tồi, nhưng tôi chưa tìm thấy điều gì tốt hơn.
Patrick M

Thay vì bí danh, tôi chỉ sao chép nó cp /usr/local/bin/python2 /usr/local/bin/pythonvà nó dường như hoạt động tốt. Đây có phải là một công việc thậm chí xấu hơn?
kingb12

1

Thêm một /usr/local/opt/python/libexec/bincách rõ ràng vào .bash_profile:

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

Sau đó, nó sẽ hoạt động chính xác.


1

Nếu bạn là vỏ cá

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

1

Thay vào đó, sử dụng pyenv để cài đặt và chuyển đổi giữa các phiên bản Python. Tôi đã sử dụng rbenv trong nhiều năm, điều tương tự, nhưng đối với Ruby. Trước đó, nó là phiên bản quản lý địa ngục.

Tham khảo trang github của pyenv để biết hướng dẫn cài đặt. Về cơ bản nó diễn ra như sau: - Cài đặt pyenv bằng homebrew. brew install pyenv - Thêm một chức năng vào cuối tập lệnh khởi động shell của bạn để pyenv có thể làm điều đó thật kỳ diệu.echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

  • Sử dụng pyenv để cài đặt tuy nhiên nhiều phiên bản Python khác nhau mà bạn cần. pyenv install 3.7.7.
  • Đặt phiên bản mặc định (toàn cầu) thành phiên bản hiện đại bạn vừa cài đặt. pyenv global 3.7.7.
  • Nếu bạn làm việc trên một dự án cần sử dụng một phiên bản khác của python, hãy xem xét pyevn local. Điều này tạo ra một tệp trong thư mục dự án của bạn chỉ định phiên bản python. Pyenv sẽ xem xét ghi đè phiên bản python toàn cầu với phiên bản trong tệp đó.

0

Bạn có thể chỉnh sửa / etc / path. Đây là của tôi:

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

Sau đó thêm một liên kết tượng trưng cho phiên bản python. Trong trường hợp của tôi

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

Voila!


0

Kể từ High Sierra, bạn cần sử dụng:

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

Điều này là do /usr/localkhông thể được theo đuổi


-7

Không có ý nghĩa gì với Python mặc định. Tôi coi đó là thực tế xấu để thay thế trình thông dịch Python hệ thống bằng một phiên bản khác. Chức năng hệ thống có thể phụ thuộc một cách nào đó vào Python hệ thống và các mô-đun cụ thể hoặc một phiên bản Python cụ thể. Thay vào đó, cài đặt các cài đặt Python tùy chỉnh của bạn ở một nơi khác an toàn và điều chỉnh $ PATH của bạn khi cần để gọi cho bạn Python thông qua tra cứu đường dẫn thay vì tìm kiếm Python mặc định.


5
không có rủi ro trong os x khi có con trăn của homebrew đến trước con trăn của hệ thống trên đường đi. Điều này rất phổ biến.
Steven Noble

3
Ngoài ra, nhu cầu sử dụng Python không phải của Apple là có thật. Tôi đã cố gắng để matplotlib, NumPy và SciPy hoạt động với Python 'mặc định' (còn gọi là Apple). Đó là một cái gì đó về việc xử lý 32/64 bit của nó chỉ đơn giản là thổi các phần mở rộng ra. Thay vào đó, rất, rất, rất vui khi có một Bia ngon thay thế. Và theo mặc định ('brew install python') Brew thực hiện chính xác ý của bạn - nó cài đặt Python thứ hai vào một cấu trúc riêng biệt, không ghi đè các đường dẫn (đó chính xác là lý do tại sao câu hỏi SO này xuất hiện).
akauppi
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.