Jak ustawić domyślną wersję Pythona na 3.x w systemie OS X?

329

Korzystam z Mountain Lion, a podstawową domyślną wersją Pythona jest 2.7. Pobrałem Python 3.3 i chcę ustawić go jako domyślny.

Obecnie:

$ python
    version 2.7.5
$ python3.3
    version 3.3

Jak ustawić, aby za każdym razem $ pythonotwierało się 3.3?

Marcus
źródło
Możliwy duplikat zmiany domyślnej wersji Pythona?
Dheeraj Vepakomma
Możesz zarządzać wersją Pythona za pomocą pyenv.
Shin Kim

Odpowiedzi:

579

Zmiana domyślnej wersji pliku wykonywalnego Pythona na cały system może spowodować uszkodzenie niektórych aplikacji zależnych od python2.

Jednak możesz aliasować polecenia w większości powłok, ponieważ domyślne powłoki w macOS (bash w wersji 10.14 i niższej; zsh w wersji 10.15) mają podobną składnię. Możesz umieścić alias python = 'python3' w swoim ~/.profile, a następnie źródło ~/.profilew swoim ~/.bash_profilei / lub swoim ~/.zsh_profilez linią taką jak:

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

W ten sposób Twój alias będzie działał w różnych powłokach.

Dzięki temu pythonpolecenie teraz wywołuje python3. Jeśli chcesz czasami wywoływać „oryginalny” python (który odnosi się do python2 ), możesz użyć tego command python, który pozostawi nienaruszony alias i działa we wszystkich powłokach.

Jeśli częściej uruchamiasz tłumaczy (ja) , zawsze możesz utworzyć więcej aliasów, aby dodać, tj .:

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

Wskazówka: w przypadku skryptów zamiast korzystania z shebang, takiego jak:

#!/usr/bin/env python

posługiwać się:

#!/usr/bin/env python3

W ten sposób system będzie używał Python3 do uruchamiania plików wykonywalnych Pythona .

Santosh Kumar
źródło
2
Czy nie należy tego umieszczać w ~ / .bash_profile zamiast ~ / .bash_aliases?
UnsettlingTrend
4
Umieszczenie alias python=python3i uruchomienie pythonw moim terminalu na osx el capitan nie działało dla mnie. Próbowałem zapisać zarówno ~ / .bash_aliases, jak i ~ / .bash_profile.
Haymaker87
43
@ Haymaker87 uruchom source ~/.bash_profilepo edycji ~/.bash_profilepliku.
Wei Lu
15
Możesz zrobić to samo dla pip:alias pip='pip3.6'
Stephen
@ surfer190, który spowoduje problem podczas pracy z sudo, prawda?
Santosh Kumar,
141

Możesz to rozwiązać za pomocą dowiązania symbolicznego.

unlink /usr/local/bin/python
ln -s /usr/local/bin/python3.3 /usr/local/bin/python
Shin Kim
źródło
24
To jest poprawna odpowiedź (aliasy są ładne, ale dostępne tylko przez bash, co ogranicza możliwości dzwonienia). Chciałbym jednak użyć unlinkzamiast rmdo usuwania dowiązań symbolicznych (jeśli przypadkowo dodasz ukośnik na końcu, rmmożesz mieć złe wyniki). Alternatywnie możesz zrobić, ln -s -f ...co powinno zastąpić bieżące dowiązanie symboliczne.
Czad Befus
2
@ChadBefus Dziękujemy za odpowiedź. Zgadzam się z Twoją opinią. unlink jest bezpieczniejszy niż rm.
Shin Kim,
3
Czy to ma jakieś konsekwencje dla skryptów, które spodziewają pythonsię python2.7?
Anton Tarasenko
19
macOS:unlink: /usr/bin/python: Operation not permitted
MarksCode
4
@MarksCode spróbuj po prostu uruchomić drugą oryginalną linię (tj. ln -s... Z /local/ ).
EliadL,
42

Otwórz plik ~ / .bash_profile .

vi ~/.bash_profile

Następnie umieść alias w następujący sposób:

alias python='python3'

Teraz zapisz plik, a następnie uruchom plik ~ / .bash_profile .

source ~/.bash_profile

Gratulacje !!! Teraz możesz używać python3, wpisując python .

python --version

Python 3.7.3

Ananta Chandra Das
źródło
Jeśli stwierdzisz, że tak jak ja to zrobiłem, ten sam problem dotyczy pipa (tzn. Wersja pip jest nadal w wersji 2.7.x), musisz wykonać te same kroki dla pip3. vi ~ / .bash_profile, alias pip = 'pip3', source ~ / .bash_profile, pip --version
SnellyBigoda
Czy naprawdę muszę source ~/.bash_profileza każdym razem, gdy ponownie otwieram terminal? Po zamknięciu i ponownym otwarciu terminalu powraca do python2.
Ricky Aguilar
21

Idź do typu terminala:

alias python=python3.x

Spowoduje to ustawienie domyślnego Pythona jako python3.x

Aditya
źródło
1
Działa to dla mnie, ale przy użyciu „alias python = python3”
Discant
Spowoduje to tymczasowe ustawienie wersji Pythona dla tej instancji terminala.
Ashwin R
12

Poniższe działało dla mnie

cd /usr/local/bin
mv python python.old
ln -s python3 python
Mayank Jain
źródło
10

Trochę się spóźniłem do tej gry, ale pomyślałem, że powinienem opublikować zaktualizowaną odpowiedź, ponieważ właśnie sam napotkałem ten problem. Należy pamiętać, że będzie to dotyczyć tylko konfiguracji opartej na komputerach Mac (nie próbowałem tego w systemie Windows ani w żadnym innym systemie Linux).

Najprostszym sposobem, aby to zadziałało, jest zainstalowanie Pythona przez Brew . Jeśli nie masz zainstalowanego naparu, musisz to zrobić najpierw. Po zainstalowaniu wykonaj następujące czynności na terminalu:

brew install python

Spowoduje to zainstalowanie Python 3. Po zainstalowaniu uruchom:

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

Zobaczysz wszystkie linki utworzone przez brew do instalacji Pythona. Będzie to wyglądać mniej więcej tak:

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

Pierwszy wiersz w tym przykładzie pokazuje python3dowiązanie symboliczne. Aby ustawić go jako domyślne pythonłącze symboliczne, uruchom następujące czynności:

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

Po ustawieniu możesz:

which python

i powinno pokazywać:

/usr/local/bin/python

Będziesz musiał ponownie załadować bieżącą powłokę terminala, aby mogła korzystać z nowego dowiązania symbolicznego w tej powłoce, jednak wszystkie nowo otwarte sesje powłoki będą (powinny) automatycznie z niego korzystać. Aby to przetestować, otwórz nową powłokę terminala i uruchom następujące polecenie:

python --version
sknight
źródło
Działa świetnie ( odniesienie )
Nepo Znat
9

Idź do „Aplikacje”, przejdź do folderu „Python”, powinien być skrypt bash o nazwie „Update Shell Profile.command” lub podobny. Uruchom ten skrypt i powinien to zrobić.

Aktualizacja: Wygląda na to, że nie powinieneś go aktualizować: jak zmienić domyślną wersję Pythona?

CT Zhu
źródło
8

To zadziałało dla mnie. Dodałem alias i ponownie uruchomiłem terminal :

alias python=/usr/local/bin/python3
toadead
źródło
6

Sądzę, że większość ludzi, którzy tu wylądowali, używa ZSH przez Internet lub cokolwiek, i to prowadzi do tej odpowiedzi .

Zamiast tego musisz dodać / zmodyfikować swoje polecenia ~/.zshrc.

Pan Crowley
źródło
3

Nie jestem pewien, czy jest on dostępny w systemie OS X, ale w systemie Linux skorzystałbym z modulepolecenia. Zobacz tutaj .

Ustaw poprawnie plik modułu, a następnie dodaj coś takiego do pliku rc (np. ~ / .Bashrc):

module load python3.3

To sprawi, że twoje ścieżki będą się zmieniać zgodnie z wymaganiami podczas logowania, bez wpływu na ustawienia domyślne systemu.

Wirowość
źródło
3

Myślę, że kiedy instalujesz Pythona, umieszcza on instrukcje ścieżki eksportu do pliku ~ / .bash_profile. Więc jeśli nie zamierzasz już używać Python 2, możesz po prostu usunąć z niego tę instrukcję. Alias, jak wspomniano powyżej, to również świetny sposób na zrobienie tego.

Oto jak usunąć referencję z ~ / .bash_profile - vim ./.bash_profile - usunąć referencję (AKA coś w rodzaju: export PATH = "/ Users / bla / anaconda: $ PATH") - zapisz i wyjdź - source ./ .bash_profile, aby zapisać zmiany

doubleOK
źródło
To się nie zdarza
co2f2e
3
$ sudo ln -s -f $(which python3) $(which python)

gotowy.

oori
źródło
1

Jeśli używasz virtualenvwrapper, możesz po prostu zlokalizować go za pomocą which virtualenvwrapper.sh, a następnie otworzyć go za pomocą vimlub dowolnego innego edytora, a następnie zmienić następujące

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

Zmień linię VIRTUALENVWRAPPER_PYTHON="$(command \which python)"na VIRTUALENVWRAPPER_PYTHON="$(command \which python3)".

Esir Kings
źródło
1

Dla mnie rozwiązaniem było użycie PyCharm i ustawienie domyślnej wersji Pythona na tę, z którą muszę pracować.

zainstaluj PyCharm i przejdź do preferencji pliku ==> dla nowego projektu, a następnie wybierz interpreter dla swoich projektów, w tym przypadku python 3.3

Chama
źródło
1

Jeśli korzystasz z Macports, nie musisz bawić się aliasami lub zmiennymi środowiskowymi, po prostu skorzystaj z metody, którą Macports już oferuje, wyjaśnionej w tym pytaniu:

Instrukcje: Macports wybierz python

TL; DR:

sudo port select --set python python27
alanwaring
źródło
1

Jeśli korzystasz z Macports, jest to łatwiejszy sposób:

biegać:

port install python37

po instalacji ustaw domyślne:

sudo port select --set python python37

sudo port select --set python3 python37

uruchom ponownie okno cmd, gotowe.

Clark So
źródło
1

Cóż ... To trochę stare. Ale nadal zasługuje na dobrą odpowiedź.

A dobrym jest to, że nie chcesz dotykać domyślnego języka Python na komputerze Mac.

Zainstaluj dowolną wersję Pythona za pomocą Homebrew lub cokolwiek innego i używaj jej w virtualenv. Virtualenv jest często uważany za coś badziewnego, ale wciąż jest o wiele lepszy niż zmiana wersji Pythona na system (macOS prawdopodobnie uchroni się przed takimi działaniami) lub na użytkownika, bash ... cokolwiek. Po prostu zapomnij o domyślnym języku Python. Korzystanie z placów zabaw, takich jak Venv, jest tym, za co Twój system operacyjny będzie najbardziej, bardzo wdzięczny.

Chodzi o to, na przykład, że wiele współczesnych dystrybucji Linuksa pozbywa się Pythona2 zainstalowanego natychmiast, pozostawiając tylko Python3 w systemie. Ale za każdym razem, gdy próbujesz zainstalować coś starego z python2 jako zależnością ... mam nadzieję, że rozumiesz o co mi chodzi. Dobry programista nie dba o to. Dobrzy programiści tworzą czyste place zabaw z pożądaną wersją Pythona.

Tor_Gash
źródło
0

Użytkownicy komputerów Mac muszą po prostu uruchomić następujący kod na terminalu

brew switch python 3.x.x

3.xx powinna być nową wersją Pythona.

Spowoduje to zaktualizowanie wszystkich łączy systemowych.

Dilshan
źródło
0

Sugestie dotyczące aliasu Python do Python3 spowodują problemy ze środowiskami wirtualnymi, które ustawiają wersję Pythona (np .: pyenv). Dzięki pyenv możesz ustawić wersję globalnie w następujący sposób:

pyenv global 3.8.2

a następnie w dowolnym konkretnym projekcie możesz utworzyć plik w wersji .python, który zawiera w sobie wersję Pythona:

pyenv local 2.7.1

To moim zdaniem najlepszy sposób zarządzania wieloma wersjami Pythona w systemie.

Jakub
źródło