Dlaczego Python 3 nie jest domyślnym plikiem binarnym Pythona?


42

Piszę pythonw oknie terminala. Dostaję Python 2.7, a nie Python 3.5. Według dokumentacji, Python 3.5 powinien być fabrycznie załadowany.


1
Jeśli skonfigurujesz środowisko wirtualne za pomocą: „python3 -m venv my-venv”, to z dowolnego terminala aktywuj to środowisko wirtualne, wywołując „source ... / my-env / bin / aktywować”, to python 3.5 będzie domyślnie w tym terminalu. Możesz sprawdzić bieżącą wersję domyślną, wywołując „python -V”.
Craig Hicks,

chociaż twoja odpowiedź jest pomocna, zapytałem dlaczego. nie jak. i to jest wielka debata. tutaj. dlaczego domyślnie powinna być starsza wersja zamiast bieżącej wersji.
givonz

1
Masz całkowitą rację co do mojego „komentarza”! Dlatego napisałem komentarz, a nie odpowiedź.
Craig Hicks

Odpowiedzi:


56

Nie wiem, jakie „dokumenty” czytasz, ani co mówią, ale /usr/bin/pythonjest to tylko symboliczny link do domyślnej wersji Pythona, w tym przypadku 2.7, który jest wynikiem pisania pythonna terminalu. Jest to wynik PEP 394, który to definiuje

  • na razie wszystkie dystrybucje powinny zapewnić, że pythonodnoszą się do tego samego celu copython2 .

type pythoni file /usr/bin/pythonpotwierdzi to.

Powodem tego innego układu niż konwencja jest to, że pakiet źródłowy python-defaults w Xenial to wersja 2.7.11 , więc dowiązanie symboliczne python wskazuje na tę wersję.

Aby użyć Pythona 3, musisz wyrazić się wyraźnie i wpisać python3w linii poleceń, co jest zalecane w przypadku, gdy potrzebujesz konkretnej wersji, możesz to również zrobić, wpisując Python 2 python2. Ubuntu domyślnie zawiera zarówno wersje Python 2, jak i 3 we wszystkich bieżących wersjach.

Istnieją plany migracji wszystkiego do Pythona 3 i oznaczenia go jako domyślnego.


Prawdopodobnie jest to łamanie wtyczki rhythmbox-zeitgeist, która zależy od zeitgeiigeist-python3, ale nie mogła jej znaleźć.
Khurshid Alam

2
To jest dokument, który oznacza OP.
SaidbakR

10

Aby uzyskać Python 3.5 REPL lub uruchomić zgodny skrypt, wpisz python3. Ma to na celu zachowanie zgodności ze wszystkimi starszymi wersjami Pythona 2.x (które zawsze były i pozostaną powiązane python).

Myślnik może znaleźć, pythonjeśli skonfigurujesz .desktopdla niego plik (in ~/.local/share/applications/), aby otworzyć terminal i na przykład uruchomić REPL. Nie ma domyślnego środowiska REPL GUI dla Pythona, a normalnym oczekiwaniem interfejsu jest to, że użytkownik pójdzie do terminala.

Mówienie o domyślnym pythonie 3.5 to opiekunowie przenoszący wszystkie skrypty systemowe z python 2.x na python 3.x, nie że python 3 zastąpiłby python 2 we wszystkich przypadkach.


tak, myślę, że poprawne pytanie brzmi: jak dodać Python3 do mojej ścieżki, aby działał automatycznie?
givonz

masz na myśli, w jaki sposób uzyskać skrypty Pythona do wykonywania jak skompilowany program?
Andrew Keech

mam to, dzieki. po prostu wpisz python3 w wierszu polecenia.
givonz

2
AIUI, co zrobić w dłuższej perspektywie z / usr / bin / python, jest wciąż pytaniem otwartym. Najlepszą praktyką dla skryptów python2 byłoby jawne użycie python2.
Peter Green

1
zamiast używać #!/usr/bin/python3(lub #!/usr/bin/python2) w skryptach, lepiej użyć (tylko dla Pythona), #!/usr/bin/env python3jeśli chcesz, aby był zdalnie przenośny. W przeważającej części jest to tylko dokumentacja, ponieważ w wielu przypadkach i tak zostanie wywołana za pomocą $ python3 your_pyprogram.py.
Michael

4

Zakładasz, że domyślny Python powinien być dostępny jako python. To założenie jest błędne.

W systemie, w którym Python 3 jest „wstępnie załadowany” i nie ma w ogóle Python 2, będzie tylko python3i nie python.

Kod napisany dla Python 3 powinien zawsze szukać interpretera o nazwie python3. Kod napisany dla Python 2 będzie historycznie szukał python.

Może nadejść moment, być może dziesięciolecia, w którym prawie nikt nie pamięta Python 2, kiedy pythonmoże zacząć się odnosić python3. Byłoby to wyłącznie dla wygody i można i nie powinno się tego robić przedwcześnie, jeśli w ogóle! Nie spieszy się z powodu następującego wpływu:

„Obecne stare” systemy nie będą miały żadnej wiedzy python2, tylko pythondlatego warto szukać kodu w Pythonie 2 python. To jest powód, dla którego pythonnależy odwoływać się do Python 2 „tak długo, jak istnieje kod Python 2”.

Nowy kod napisany dla Pythona 2, jeśli ma to sens, może doskonale szukać python. Może również szukać python2, jeśli jest przeznaczony do uruchamiania tylko na systemach świadomych i zadbanych w Pythonie 3 (które powinny oferować taki link).

Zaletą użycia kodu w Pythonie 2 python2jest to, że nie wymaga on dodatkowego dotykania, gdy pythonzacznie się odwoływać python3, co może się nigdy nie zdarzyć, lub gdy pythonw ogóle zniknie, co może się zdarzyć lub nie. (Może się to zdarzyć, jeśli kod Pythona 2 zginie po hipotetycznym Pythonie 4, który zyskuje popularność dzięki interpreterowi python4. - Ponieważ pozwolenie na wskazanie jednego python3lub python4obu byłoby mylące).


2

Dostępne są wersje Python w wersji 2.x, 3.x. jeśli wywołasz Python tak, jak wskazuje na Python 2.x, załaduje Python 2.x

Poniższy obrazek pomoże ci.

wprowadź opis zdjęcia tutaj


1
jak wpisać to samo polecenie i uzyskać 2 różne wyniki?
givonz

4
innym wyjściem od drugiego wywołania pythonjest użycie <tab>zapytania do autouzupełniacza, który następnie wypisuje możliwe permutacje python*i powoduje powrót do nowego monitu.
Andrew Keech

@ givonz, hmm, użyłem klucza TAB, bracie. nie jest produkowany. możliwy jest wzór binarny.
rɑːdʒɑ

Na co głosować negatywnie?
rɑːdʒɑ

2
Nie głosowałem negatywnie, ale myślę, że odpowiedź powinna wyjaśnić, dlaczego dwa pierwsze wyjścia są różne i jaka jest rola apt-cache, szczególnie dla początkujących Ubuntu.
AL

2

Python 3.x powinien działać z 16.04 - Właściwie to na pewno zadziała. Mam Ubuntu 14.04 i mam Python 3.4.3 - Wszystko, co musisz zrobić, aby go przetestować, to wpisz python3i powinien powiedzieć, którą wersję uruchamiasz.


2
Nie zadzwoniłbym za pomocą informatyki systemu operacyjnego. I ściśle mówiąc: Ubuntu to system operacyjny oparty na systemie Linux, a nie system uniksowy.
magu_

Muszę jeszcze zrozumieć różnicę między Linuksem a Unixem oprócz niektórych poleceń i inaczej, ale ściśle sformułowanych poleceń. chociaż gui jest znacznie bardziej zaawansowane niż to, co widzę w solaris.
givonz

1
-1 To nie dotyczy pytania dlaczego .
David Foerster
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.