Làm cách nào để đặt phiên bản mặc định của Python thành 3.x trên OS X?


329

Tôi đang chạy Mountain Lion và phiên bản Python mặc định cơ bản là 2.7. Tôi đã tải xuống Python 3.3 và muốn đặt nó làm mặc định.

Hiện tại:

$ python
    version 2.7.5
$ python3.3
    version 3.3

Làm cách nào để cài đặt nó sao cho mỗi lần tôi chạy, $ pythonnó sẽ mở 3.3?



Bạn có thể quản lý phiên bản của python với pyenv.
Shin Kim

Câu trả lời:


579

Thay đổi phiên bản hệ thống thực thi của python mặc định có thể phá vỡ một số ứng dụng phụ thuộc vào python2.

Tuy nhiên, bạn có thể đặt bí danh cho các lệnh trong hầu hết các shell, vì các shell mặc định trong macOS (bash trong 10.14 trở xuống; zsh trong 10.15) chia sẻ một cú pháp tương tự. Bạn có thể đặt bí danh python = 'python3' vào ~/.profile, sau đó nhập nguồn ~/.profilecủa bạn ~/.bash_profilevà / hoặc của bạn ~/.zsh_profilebằng một dòng như:

[ -e ~/.profile ] && . ~/.profile

Bằng cách này, bí danh của bạn sẽ hoạt động trên các vỏ.

Với điều này, pythonlệnh bây giờ gọi python3. Nếu bạn muốn gọi con trăn "nguyên bản" (có nghĩa là python2 ), bạn có thể sử dụng command python, điều này sẽ khiến bí danh không bị ảnh hưởng và hoạt động trong tất cả các shell.

Nếu bạn khởi chạy trình thông dịch thường xuyên hơn (tôi làm) , bạn luôn có thể tạo thêm bí danh để thêm, tức là:

alias 2='python2'
alias 3='python3'

Mẹo: Đối với tập lệnh, thay vì sử dụng shebang như:

#!/usr/bin/env python

sử dụng:

#!/usr/bin/env python3

Bằng cách này, hệ thống sẽ sử dụng python3 để chạy các tệp thực thi python .


2
Không nên đặt cái này vào ~ / .bash_profile thay vì ~ / .bash_aliases?
Bất ổn Xu hướng

4
Đặt alias python=python3và sau đó chạy pythontrong thiết bị đầu cuối của tôi trên osx el capitan không làm việc cho tôi. Đã thử lưu nó cả ~ / .bash_aliases và ~ / .bash_profile.
Haymaker87

43
@ Haymaker87 chạy source ~/.bash_profilesau khi chỉnh sửa ~/.bash_profiletập tin.
Wei Lu

15
Bạn có thể làm tương tự cho pip:alias pip='pip3.6'
stephen

@ surfer190 sẽ gây ra vấn đề khi chạy với sudo, phải không?
Santosh Kumar

141

Bạn có thể giải quyết nó bằng liên kết tượng trưng.

unlink /usr/local/bin/python
ln -s /usr/local/bin/python3.3 /usr/local/bin/python

23
Đây là câu trả lời đúng (bí danh là tốt nhưng chỉ có thể truy cập bằng bash, giới hạn nơi bạn có thể gọi từ đó). Tuy nhiên, tôi sẽ sử dụng unlinkthay vì rmxóa liên kết tượng trưng (nếu bạn vô tình thêm dấu gạch chéo vào rmbạn có thể có một số kết quả xấu). Ngoài ra, bạn có thể làm điều ln -s -f ...đó sẽ ghi đè lên liên kết tượng trưng hiện tại.
Chad Befus

2
@ChadBefus Cảm ơn bạn đã trả lời. Tôi đồng ý với ý kiến ​​của bạn. hủy liên kết là an toàn hơn rm.
Shin Kim

3
Liệu nó có bất kỳ hậu quả cho các kịch bản dự kiến pythonsẽ được python2.7?
Anton Tarasenko

18
macOS:unlink: /usr/bin/python: Operation not permitted
MarksCode

4
@MarksCode cố gắng chỉ chạy dòng gốc thứ hai (tức là ln -s... với /local/ ).
EliadL

42

Mở tệp ~ / .bash_profile .

vi ~/.bash_profile

Sau đó đặt bí danh như sau:

alias python='python3'

Bây giờ lưu tệp và sau đó chạy tệp ~ / .bash_profile .

source ~/.bash_profile

Chúc mừng !!! Bây giờ, bạn có thể sử dụng python3 bằng cách gõ python .

python --version

Python 3.7.3


Nếu bạn thấy như tôi đã làm thì vấn đề tương tự áp dụng cho pip (tức là độ đảo ngược của pip vẫn là 2.7.x) thì bạn sẽ cần phải thực hiện các bước tương tự cho pip3. vi ~ / .bash_profile, bí danh pip = 'pip3', nguồn ~ / .bash_profile, pip --version
SnellyBigoda

Tôi có thực sự cần source ~/.bash_profilemỗi khi tôi mở lại thiết bị đầu cuối của mình không? Nó trở lại python2 khi tôi đóng và mở lại terminal.
Ricky Aguilar

21

Chuyển đến loại thiết bị đầu cuối:

alias python=python3.x

Điều này sẽ thiết lập python mặc định là python3.x


1
Điều này làm việc cho tôi nhưng sử dụng "alias python = python3"
Discant

Điều này sẽ tạm thời đặt phiên bản python cho phiên bản thiết bị đầu cuối đó.
Ashwin R

12

Sau đây làm việc cho tôi

cd /usr/local/bin
mv python python.old
ln -s python3 python

10

Tôi hơi muộn với trò chơi này, nhưng tôi nghĩ tôi nên đăng một câu trả lời cập nhật vì tôi chỉ gặp phải vấn đề này. Xin lưu ý rằng điều này sẽ chỉ áp dụng cho thiết lập dựa trên Mac (Tôi chưa từng thử nó với Windows hoặc bất kỳ hương vị nào của Linux).

Cách đơn giản nhất để làm việc này là cài đặt Python thông qua Brew . Nếu bạn chưa cài đặt brew, bạn sẽ cần phải làm điều đó trước tiên. Sau khi cài đặt, hãy làm như sau tại thiết bị đầu cuối:

brew install python

Điều này sẽ cài đặt Python 3. Sau khi cài đặt, hãy chạy nó:

ls -l /usr/local/bin/python*

Bạn sẽ thấy tất cả các liên kết được tạo bởi brew để cài đặt Python. Nó sẽ trông giống như thế này:

lrwxr-xr-x  1 username  admin  36 Oct  1 13:35 /usr/local/bin/python3@ -> ../Cellar/python/3.7.4_1/bin/python3
lrwxr-xr-x  1 username  admin  43 Oct  1 13:35 /usr/local/bin/python3-config@ -> ../Cellar/python/3.7.4_1/bin/python3-config
lrwxr-xr-x  1 username  admin  38 Oct  1 13:35 /usr/local/bin/python3.7@ -> ../Cellar/python/3.7.4_1/bin/python3.7
lrwxr-xr-x  1 username  admin  45 Oct  1 13:35 /usr/local/bin/python3.7-config@ -> ../Cellar/python/3.7.4_1/bin/python3.7-config
lrwxr-xr-x  1 username  admin  39 Oct  1 13:35 /usr/local/bin/python3.7m@ -> ../Cellar/python/3.7.4_1/bin/python3.7m
lrwxr-xr-x  1 username  admin  46 Oct  1 13:35 /usr/local/bin/python3.7m-config@ -> ../Cellar/python/3.7.4_1/bin/python3.7m-config

Hàng đầu tiên trong ví dụ này hiển thị python3liên kết tượng trưng. Để đặt nó làm pythonsymlink mặc định, hãy chạy như sau:

ln -s -f /usr/local/bin/python3 /usr/local/bin/python

Sau khi thiết lập, bạn có thể làm:

which python

và nó sẽ hiển thị:

/usr/local/bin/python

Bạn sẽ phải tải lại shell terminal hiện tại của mình cho nó để sử dụng symlink mới trong shell đó, tuy nhiên, tất cả các phiên shell mới được mở sẽ (nên) tự động sử dụng nó. Để kiểm tra điều này, hãy mở một vỏ thiết bị đầu cuối mới và chạy như sau:

python --version

Hoạt động tuyệt vời ( Tham khảo )
Nepo Znat


8

Điều này làm việc cho tôi. Tôi đã thêm bí danh và khởi động lại thiết bị đầu cuối của mình :

alias python=/usr/local/bin/python3

đẹp đơn giản và cho điểm. công việc tuyệt vời
Avshalom

6

Tôi tin rằng hầu hết mọi người hạ cánh ở đây đang sử dụng ZSH thorugh iterm hoặc bất cứ điều gì, và điều đó đưa bạn đến câu trả lời này .

Bạn phải thêm / sửa đổi các lệnh của bạn ~/.zshrcthay vào đó.


3

Tôi không chắc nếu nó có sẵn trên OS X, nhưng trên linux tôi sẽ sử dụng modulelệnh này. Xem tại đây .

Thiết lập mô-đun chính xác, sau đó thêm một cái gì đó như thế này vào tệp RC của bạn (ví dụ ~ / .bashrc):

module load python3.3

Điều này sẽ làm cho nó để đường dẫn của bạn được chuyển đổi theo yêu cầu khi bạn đăng nhập mà không ảnh hưởng đến bất kỳ hệ thống mặc định nào.


3

Tôi nghĩ rằng khi bạn cài đặt python, nó đặt các câu lệnh đường dẫn xuất vào tệp ~ / .bash_profile của bạn. Vì vậy, nếu bạn không có ý định sử dụng Python 2 nữa, bạn có thể xóa câu lệnh đó khỏi đó. Bí danh như đã nêu ở trên cũng là một cách tuyệt vời để làm điều đó.

Dưới đây là cách xóa tham chiếu khỏi ~ / .bash_profile - vim ./.bash_profile - xóa tham chiếu (AKA một cái gì đó như: export PATH = "/ Users / bla / anaconda: $ PATH") - lưu và thoát - nguồn ./ .bash_profile để lưu các thay đổi


Nó không xảy ra
co2f2e

3
$ sudo ln -s -f $(which python3) $(which python)

làm xong.



1

Nếu bạn đang sử dụng a virtualenvwrapper, bạn có thể xác định vị trí của nó bằng cách sử dụng which virtualenvwrapper.sh, sau đó mở nó bằng cách sử dụng vimhoặc bất kỳ trình chỉnh sửa nào khác sau đó thay đổi như sau

# Locate the global Python where virtualenvwrapper is installed.
if [ "${VIRTUALENVWRAPPER_PYTHON:-}" = "" ]
then
    VIRTUALENVWRAPPER_PYTHON="$(command \which python)"
fi

Thay đổi dòng VIRTUALENVWRAPPER_PYTHON="$(command \which python)"thành VIRTUALENVWRAPPER_PYTHON="$(command \which python3)".


1

Đối với tôi, giải pháp là sử dụng PyCharm và đặt phiên bản python mặc định thành phiên bản mà tôi cần làm việc.

cài đặt PyCharm và đi đến tệp ==> tùy chọn cho dự án mới, sau đó chọn trình thông dịch bạn muốn cho các dự án của bạn, trong trường hợp này là python 3.3


1

Nếu bạn sử dụng macports, bạn không cần chơi với bí danh hoặc biến môi trường, chỉ cần sử dụng phương thức macports đã cung cấp, được giải thích bằng Hỏi & Đáp này:

Cách làm: Macports chọn python

TL; DR:

sudo port select --set python python27

1

Nếu bạn đang sử dụng macports, cách đó dễ thực hiện hơn:

chạy:

port install python37

Sau khi cài đặt, đặt mặc định:

sudo port select --set python python37

sudo port select --set python3 python37

khởi động lại cửa sổ cmd của bạn, kết thúc.


1

Chà ... nó hơi cũ. Nhưng vẫn xứng đáng có một câu trả lời tốt.

Và cái tốt là Bạn không muốn chạm vào Python mặc định trên Mac.

Cài đặt bất kỳ phiên bản Python nào bạn cần thông qua Homebrew hoặc bất cứ thứ gì và sử dụng nó trong virtualenv. Virtualenv thường được coi là một thứ gì đó giống như tào lao, nhưng nó vẫn tốt hơn nhiều so với việc thay đổi phiên bản python trên toàn hệ thống (macOS có khả năng tự bảo vệ bản thân khỏi các hành động như vậy) hoặc toàn bộ người dùng, bash-wide ... bất cứ điều gì. Chỉ cần quên Python mặc định. Sử dụng các sân chơi như venv là điều mà hệ điều hành của bạn sẽ được nhiều nhất, rất biết ơn nhất.

Ví dụ, trường hợp là nhiều bản phân phối Linux hiện đại loại bỏ Python2 được cài đặt sẵn, chỉ để lại Python3 trong hệ thống. Nhưng mỗi khi bạn cố gắng cài đặt một cái gì đó cũ với python2 như một sự phụ thuộc ... hy vọng bạn hiểu ý tôi là gì. Một nhà phát triển tốt không quan tâm. Các nhà phát triển giỏi tạo ra các sân chơi sạch sẽ với phiên bản python mà họ mong muốn.


0

Người dùng Mac chỉ cần chạy mã sau trên thiết bị đầu cuối

brew switch python 3.x.x

3.xx nên là phiên bản python mới.

Điều này sẽ cập nhật tất cả các liên kết hệ thống.


0

Gợi ý về bí danh python cho python3 sẽ gây ra sự cố với môi trường ảo đặt phiên bản của python (ví dụ: pyenv). Với pyenv, bạn có thể đặt phiên bản trên toàn cầu như vậy:

pyenv global 3.8.2

và sau đó trong bất kỳ dự án cụ thể nào, bạn có thể tạo tệp phiên bản .python có phiên bản python bên trong nó:

pyenv local 2.7.1

Theo tôi, đây là cách tốt nhất để quản lý nhiều phiên bản của python trên một hệ thống.

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.