Tylko ostrzeżenie: Nie próbuj zmieniać dowiązania symbolicznego / usr / bin / python, aby wskazywało na python3 zamiast 2.7. Wiele programów dostępnych w repozytoriach Ubuntu wymaga kompatybilności / usr / bin / python z python 2.x.
soulsource
1
Ach, teraz mam to, co miałeś na myśli mówiąc o aktualizacji ... Właściwie programiści Ubuntu nad tym pracują : wiki.ubuntu.com/Python/3 „Ubuntu 14.04 LTS ma na celu wydanie tylko Python 3 na płycie CD zdjęcia."
soulsource
1
Z drugiej strony, każdy, kto tu przyjeżdża, ponieważ próbuje dowiedzieć się, jak ustawić domyślny język Python 3, może zamiast tego znaleźć zastosowanie w badaniu środowisk wirtualnych (np. Virtualenv) lub kontenerów (np. LXC lub Docker).
Kevin
1
W odniesieniu do ostrzeżenia soulsource na górze patrz PEP 394, który standaryzuje konwencje nazewnictwa dla współistniejących plików wykonywalnych Pythona i na którym (i powinni) polegać programiści i opiekunowie pakietów.
David Foerster,
2
@wjandrea, tak, nawet w środowisku wirtualnym, pythonnależy zachować jako znaczenie python2. Miałem na myśli mój komentarz jako sposób na posiadanie wersji Pythona specyficznej dla aplikacji, zamiast próbować obejść Python w systemie.
Kevin,
Odpowiedzi:
370
Prostym bezpiecznym sposobem byłoby użycie aliasu. Umieść to w ~/.bashrclub ~/.bash_aliasesplik:
alias python=python3
Po dodaniu powyższego do pliku uruchom source ~/.bashrclub source ~/.bash_aliases.
Zarówno dla Ubuntu, jak i Debiana, mamy stałe cele projektu, aby uczynić Python 3 domyślną, preferowaną wersją Pythona w dystrybucjach.
Co to nie znaczy:
/usr/bin/pythonwskaże Python 3. Nie, tak się nie stanie (chyba że PEP 394 opowiada się inaczej, co jest wątpliwe w dającej się przewidzieć przyszłości). /usr/bin/pythoni /usr/bin/python2będzie wskazywać na Python 2.7 i /usr/bin/python3będzie wskazywać najnowszą obsługiwaną wersję Python 3.
Python 2 zostanie usunięty z archiwum. Nie, tak się nie stanie . Oczekujemy, że Python 2.7 pozostanie obsługiwany i dostępny w Ubuntu przez dość długi czas, biorąc pod uwagę, że PEP 373 obiecuje wsparcie w zakresie naprawy błędów do 2020 roku.
Nie jest zalecane zmienianie dowiązania symbolicznego z powodu innych zależności pakietów, ale „mają stałe cele projektu, aby uczynić Python 3 domyślną, preferowaną wersją Pythona w dystrybucji”.
Do użytku CLI, jak @Radu Rădeanu , polecam umieszczenie aliasu w instrukcji ~/.bashrc, .bash_aliasespliku (różne pliki, w tym ~/.bash_profilesą ładowane przynajmniej raz, są głównie do celów organizacyjnych, ale mogą się różnić od platformy). Środowiska wirtualne Python również działają dobrze.
Przykłady aliasów:
alias python=python3
lub
alias python='/usr/bin/python3'
Skrypty powinny nadal używać czegoś takiego jak #!/usr/bin/env python3dla kompatybilności krzyżowej.
Używanie envjest przydatne do mieszanego użytkowania w środowiskach wirtualnych.
Uwaga (dzięki @wjandrea): aliasy są częścią środowiska wykonawczego bash, a nie środowiskiem użytkownika. Dlatego nie są one dostępne dla shebang ( #!). Jeśli wolisz alias python = python3, to niektóre program.pybez shebang mogą być wykonane przez wywołanie takiego aliasu interpretera python program.py. Aliasing może być również przydatny w systemach z wieloma wersjami Python3, takich jak 3.4 i 3.6.
To wydaje się być nieaktualne: planowali usunąć python2 w Xenial, ale potem tego nie zrobili.
OrangeDog,
1
@OrangeDog, dzięki za aktualizację. Tak, strona wiki, którą cytowałem, jest teraz oznaczona jako nieaktualna, ponieważ w ciągu ostatnich dwóch lat dokonano większego postępu w przejściu tylko na Python 3. Nową stroną śledzącą ten postęp jest oficjalna strona Ubuntu Python .
Kevin,
Strona „najnowsza” również jest nieaktualna, jeśli chodzi o plany Xenial.
OrangeDog,
Nie powiedziałbym, że jest „nieaktualny” tak bardzo, jak „nie był ostatnio aktualizowany”. Nadal wydaje się, że jest to bieżąca lokalizacja przechowywania postów na ten temat. Jednak w komentarzach tutaj byłbym wdzięczny za wszelkie inne niedawne źródła, które każdy może znaleźć. Dodanie większej liczby źródeł do mojej odpowiedzi, dlaczego nie wprowadzić zmiany na just python, nie jest tak naprawdę istotne, dopóki konwersja nie zostanie zakończona. Nawet wtedy może to po prostu stać się problemem.
Kevin,
2
Aliasy są wewnętrzne dla Bash, nie są częścią środowiska, więc nadal będziesz musiał używać python3w shebang, nie python.
wjandrea
28
Aktualizacja: dowiedziałem się, że jest to niewłaściwy sposób, ponieważ Python2 i Python3 nie są wymienne.
python2 i python3 nie są alternatywami. Nie używaj do tego alternatyw aktualizacji.
jobin
Dlaczego nie są Czy ktoś z was może wyjaśnić, dlaczego update-alternativesnie nadaje się do Pythona? Czy to z powodu legacy.python.org/dev/peps/pep-0394 ?
Dmitrij Grigoryev,
11
alternatywami są różne implementacje dla tych samych funkcjonalności. python2 i python3 nie zapewniają tych samych funkcji.
Ely,
Możesz zrobić coś takiego, jeśli ręcznie zainstalowałeś (za pomocą ppa lub cokolwiek) inne wersje python3. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
David Baucum,
To właśnie musiałem zrobić dla 18.04.2 VM, która nie jest dostarczana z Pythonem. Dzięki
Dark Star1,
9
Ubuntu i pozostałe dystrybucje Linuksa są nadal w dużej mierze zależne od Pythona 2.7 dla szeregu aplikacji i poleceń. Jeśli zmienisz domyślne odniesienie „python” na Python 3.x, wówczas szereg funkcji Python zacznie generować błędy asercji.
Na przykład w systemie Ubuntu „pip” dla jednego z nich nie działałby już poprawnie, chyba że bezpośrednio edytowałeś plik i zmieniłeś shebang na „#! / Usr / bin / env python2.7”. W wersjach RHEL (Red Hat Enterprise Linux), takich jak Red Hat, Fedora i CentOS, polecenie „Yum” jest również zależne od Pythona 2.7.
Chodzi mi o to, że spowodowałbyś, że znaczna ilość kodu zacząłaby generować błędy asercji, abyś mógł wpisać „python” w terminalu, aby odwoływał się do Pythona 3.x.
O wiele lepiej jest użyć polecenia „python3” w terminalu i shebang „#! / Usr / bin / env python3” w plikach Python 3.x.
Odnośnie „Ubuntu 18.04 nie jest już dostarczane z Python 2, więc nie powinno być tak źle”. , w systemie Ubuntu (nawet w wersjach, które domyślnie nie mają zainstalowanego Pythona 2) pythonzakłada się , że wywoływanym jest Python 2, więc może to popsuć niektóre rzeczy.
Czy nie byłoby łatwiej użyć dowiązania symbolicznego? sudo ln -s /usr/bin/python3 /usr/local/bin/py
wjandrea
0
Uważam, że bardzo pomocne jest po prostu usunięcie / usr / bin / python i / usr / bin / pip. Zmusza to wszystkie programy do polegania na poleceniach „python2” i „python3”.
Chociaż niektóre opcjonalne i nieaktualne pakiety zależą od #!/usr/bin/pythonpracy, wolę przesyłać łaty do tych programów, niż nadal popełniam dziwne, a czasem trudne do debugowania błędy.
Można użyć tej opcji, update-alternativesaby dostarczyć różne wersje programów, które mogą być potrzebne w różnych momentach z powodu problemów ze zgodnością.
Ta odpowiedź jest dobrym przykładem na to, jak skonfigurować rzeczy do jednoczesnego utrzymywania różnych wersji gcc / g ++, na przykład.
Początkujący użytkownicy mogą nie być w stanie łatwo dopasować połączonej odpowiedzi do innej sytuacji. Oprócz podania wcześniejszej odpowiedzi dobrze byłoby określić kroki niezbędne dla Pythona.
python
należy zachować jako znaczeniepython2
. Miałem na myśli mój komentarz jako sposób na posiadanie wersji Pythona specyficznej dla aplikacji, zamiast próbować obejść Python w systemie.Odpowiedzi:
Prostym bezpiecznym sposobem byłoby użycie aliasu. Umieść to w
~/.bashrc
lub~/.bash_aliases
plik:Po dodaniu powyższego do pliku uruchom
source ~/.bashrc
lubsource ~/.bash_aliases
.Na przykład:
Aby obejść alias, użyj
command
wbudowanego polecenia:Innym sposobem obejścia aliasu jest użycie
\
przed poleceniem.Aby wyłączyć alias w bieżącej powłoce, użyj
unalias
wbudowanego polecenia:źródło
[Czerwiec 2016 r.] Zalecanym miejscem informacji o przejściu jest oficjalna strona Ubuntu Python .
Z wiki Ubuntu :
Nie jest zalecane zmienianie dowiązania symbolicznego z powodu innych zależności pakietów, ale „mają stałe cele projektu, aby uczynić Python 3 domyślną, preferowaną wersją Pythona w dystrybucji”.
Do użytku CLI, jak @Radu Rădeanu , polecam umieszczenie aliasu w instrukcji
~/.bashrc
,.bash_aliases
pliku (różne pliki, w tym~/.bash_profile
są ładowane przynajmniej raz, są głównie do celów organizacyjnych, ale mogą się różnić od platformy). Środowiska wirtualne Python również działają dobrze.Przykłady aliasów:
lub
Skrypty powinny nadal używać czegoś takiego jak
#!/usr/bin/env python3
dla kompatybilności krzyżowej.Używanie
env
jest przydatne do mieszanego użytkowania w środowiskach wirtualnych.Uwaga (dzięki @wjandrea): aliasy są częścią środowiska wykonawczego bash, a nie środowiskiem użytkownika. Dlatego nie są one dostępne dla shebang (
#!
). Jeśli wolisz alias python = python3, to niektóreprogram.py
bez shebang mogą być wykonane przez wywołanie takiego aliasu interpreterapython program.py
. Aliasing może być również przydatny w systemach z wieloma wersjami Python3, takich jak 3.4 i 3.6.źródło
python
, nie jest tak naprawdę istotne, dopóki konwersja nie zostanie zakończona. Nawet wtedy może to po prostu stać się problemem.python3
w shebang, niepython
.Aktualizacja: dowiedziałem się, że jest to niewłaściwy sposób, ponieważ Python2 i Python3 nie są wymienne.
Możesz wypróbować narzędzie wiersza poleceń
update-alternatives
.Jeśli pojawi się błąd „nie ma alternatywy dla Pythona”, należy samodzielnie ustawić alternatywę za pomocą następującego polecenia:
Zmień odpowiednio ścieżkę
/usr/bin/python3
na żądaną wersję Pythona.źródło
update-alternatives
nie nadaje się do Pythona? Czy to z powodu legacy.python.org/dev/peps/pep-0394 ?sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
Ubuntu i pozostałe dystrybucje Linuksa są nadal w dużej mierze zależne od Pythona 2.7 dla szeregu aplikacji i poleceń. Jeśli zmienisz domyślne odniesienie „python” na Python 3.x, wówczas szereg funkcji Python zacznie generować błędy asercji.
Na przykład w systemie Ubuntu „pip” dla jednego z nich nie działałby już poprawnie, chyba że bezpośrednio edytowałeś plik i zmieniłeś shebang na „#! / Usr / bin / env python2.7”. W wersjach RHEL (Red Hat Enterprise Linux), takich jak Red Hat, Fedora i CentOS, polecenie „Yum” jest również zależne od Pythona 2.7.
Chodzi mi o to, że spowodowałbyś, że znaczna ilość kodu zacząłaby generować błędy asercji, abyś mógł wpisać „python” w terminalu, aby odwoływał się do Pythona 3.x.
O wiele lepiej jest użyć polecenia „python3” w terminalu i shebang „#! / Usr / bin / env python3” w plikach Python 3.x.
źródło
Zrobić
następnie napisz albo
lub
Zapisz plik, zamknij terminal i otwórz go ponownie.
Połączyć
źródło
Można podlinkowujemy
/usr/bin/python
siępython3
zi możesz zapobiec instalacji Pythona 2 i pip2 jako zależności od
Zobacz inne odpowiedzi, dlaczego możesz tego nie chcieć. Ubuntu 18.04+ nie jest już wyposażony w Python 2, więc nie powinno być tak źle.
źródło
python
zakłada się , że wywoływanym jest Python 2, więc może to popsuć niektóre rzeczy.python
->/usr/bin/python
(pod warunkiem, że masz uprawnienia do zapisu w / usr / local / bin)
wtedy wpisujesz py (i używasz py w #! linii) dla wybranego pythona.
źródło
sudo ln -s /usr/bin/python3 /usr/local/bin/py
Uważam, że bardzo pomocne jest po prostu usunięcie / usr / bin / python i / usr / bin / pip. Zmusza to wszystkie programy do polegania na poleceniach „python2” i „python3”.
Chociaż niektóre opcjonalne i nieaktualne pakiety zależą od
#!/usr/bin/python
pracy, wolę przesyłać łaty do tych programów, niż nadal popełniam dziwne, a czasem trudne do debugowania błędy.źródło
Można użyć tej opcji,
update-alternatives
aby dostarczyć różne wersje programów, które mogą być potrzebne w różnych momentach z powodu problemów ze zgodnością.Ta odpowiedź jest dobrym przykładem na to, jak skonfigurować rzeczy do jednoczesnego utrzymywania różnych wersji gcc / g ++, na przykład.
po prostu zrób to samo z python2.7 i python 3.3
źródło