Jaką mam wersję Pythona?

73

Jak mogę dowiedzieć się, jakie mam wersje Pythona?

Używam Ubuntu 14.04 (Trusty Tahr).

TechJhola
źródło
4
Szybkim sposobem sprawdzenia, jakie pliki binarne Pythona są zainstalowane, jest:ls /usr/bin | grep python
Tejas Kale
1
@TejasKale Lepiej uruchomić ls /usr/bin/python*(lub ls /usr/bin/*python*jeśli naprawdę chcesz pliki z python dowolnym miejscem w nazwie). W ten sposób lsnadal formatuje dane wyjściowe dla terminala (i otrzymujesz wiele kolumn oraz, z domyślnym lsaliasem w Ubuntu, kolorowanie).
Eliah Kagan

Odpowiedzi:

86

Możesz użyć python -V(i wsp.), Aby pokazać wersję Pythona, na którą pythonrozpoznaje to polecenie. Jeśli to wszystko, czego potrzebujesz, to koniec. Ale zobaczenie każdej wersji Pythona w twoim systemie zajmuje trochę więcej.

W Ubuntu możemy sprawdzić rozdzielczość za pomocą readlink -f $(which python). W domyślnych przypadkach w 14.04 będzie to po prostu wskazywać /usr/bin/python2.7.

Możemy to połączyć, aby pokazać wersję tej wersji Pythona:

$ readlink -f $(which python) | xargs -I % sh -c 'echo -n "%: "; % -V'
/usr/bin/python2.7: Python 2.7.6

Ale to wciąż mówi nam tylko, jaka jest nasza obecna pythonrozdzielczość. Gdybyśmy byli w Virtualenv (wspólny system zarządzania stosami Pythona), pythonmógłby rozwiązać inną wersję:

$ readlink -f $(which python) | xargs -I % sh -c 'echo -n "%: "; % -V'
/home/oli/venv/bin/python: Python 2.7.4

To jest prawdziwa wydajność.

Faktem jest, że w twoim systemie mogą być wydzielone setki różnych wersji Pythona, albo na ścieżkach dodanych kontekstowo, albo żyjących pod różnymi nazwami binarnymi (jak python3).

Jeśli założymy, że plik binarny Python zawsze będzie wywoływany python<something>i będzie plikiem binarnym, możemy po prostu przeszukać cały system w poszukiwaniu plików spełniających te kryteria:

$ sudo find / -type f -executable -iname 'python*' -exec file -i '{}' \; | awk -F: '/x-executable; charset=binary/ {print $1}' | xargs readlink -f | sort -u | xargs -I % sh -c 'echo -n "%: "; % -V'
/home/oli/venv/bin/python: Python 2.7.4
/media/ned/websites/venvold/bin/python: Python 2.7.4
/srv/chroot/precise_i386/usr/bin/python2.7: Python 2.7.3
/srv/chroot/trusty_i386/usr/bin/python2.7: Python 2.7.6
/srv/chroot/trusty_i386/usr/bin/python3.4: Python 3.4.0
/srv/chroot/trusty_i386/usr/bin/python3.4m: Python 3.4.0
/usr/bin/python2.7: Python 2.7.6
/usr/bin/python2.7-dbg: Python 2.7.6
/usr/bin/python3.4: Python 3.4.0
/usr/bin/python3.4dm: Python 3.4.0
/usr/bin/python3.4m: Python 3.4.0
/web/venvold/bin/python: Python 2.7.4

Jest to oczywiście dość obrzydliwe polecenie, ale jest to znowu prawdziwy efekt i wydaje się, że wykonał dość dokładną robotę.

Oli
źródło
Dostaję następujące i nie jestem pewien, co to znaczy: readlink: extra operand '/usr/bin/python2.7' Try 'readlink --help' for more information.
hello_there_andy
zakładałem, python -vże zwróci wersję i wykonałem to jako root. wydrukował długą listę rzeczy, ale na górze napisał, installing zipimport hooka teraz wydaje się, że jestem w programie, z którego nie mam pojęcia, jak się wydostać, a co dopiero odinstalować? czy możesz mi pomóc tutaj
BugWhisperer
2
@Anthony -VFlaga wersji uwzględnia wielkość liter. python -vumieści cię w konsoli Pythona z włączonymi szczegółowymi komunikatami. Control + D, aby wyjść. Lub napisz exit()i naciśnij klawisz Return.
Oli
@hello_there_andy Chyba popełniłeś literówkę podczas kopiowania polecenia.
wjandrea
63

Wpisz następujące polecenie w terminalu ( Ctrl+ Alt+ T):

python -V

lub

python --version

Możesz znaleźć listę opcji / parametrów dla wielu poleceń w terminalu, wpisując polecenie, a następnie --help

Przykład:

python --help

Ręczne / manpages również dostępne dla większości z takim CLI, które mogą być wyświetlane man <command>(np man python)

Od man python:

COMMAND LINE OPTIONS
        -V ,  --version
              Prints the Python version number of the executable and exits.

Jest również python3zainstalowany na wielu komputerach, dzięki czemu możesz:

python3 --version

aby dowiedzieć się, jakiego używasz Python 3.x.

niepewny
źródło
2
Warto zauważyć, ponieważ @Florian Diesch poniżej nawiązuje do tego, że prawdopodobnie masz wiele wersji „python”. Domyślne wywołanie „python” wskazuje na instalację Pythona 2.7, chociaż Ubuntu 14.04 jest również wyposażony w Python 3.0.
Mitch,
32
python --version

i

python2 --version

pokaż wersję Python 2.x,

python3 --version

zainstalowana wersja Python 3.x

Florian Diesch
źródło
8

Po uruchomieniu pythonw terminalu będzie generować dane wyjściowe w następujący sposób:

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Zobacz pierwszą linię - Python 2.7.6.

Uruchom także python3. Mam 3.4.1

Python 3.4.1 (default, Jul 31 2014, 12:46:17) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Nie pokaże to jednak wszystkich. Jeśli masz 2 lub więcej wersji Python 3.Xx, zobaczysz tylko najnowszą.

Domyślnie 14.04, masz 2.7.6 i 3.4.0. Jak widać zaktualizowałem do wersji 3.4.1. Wiem, że nadal mam wersję 3.4.0, ponieważ kiedy idę do /usr/bin, widzę python3.4, a jeśli uruchomię się /usr/bin/python3.4z wiersza poleceń, dostanę wersję 3.4.0, a uruchomienie /usr/local/bin/python3.4daje mi wersję 3.4.1

Moje zaimki to On / On

Tim
źródło
„Jeśli masz 2 lub więcej wersji Python 3.Xx, zobaczysz tylko najnowszą.” Czy zamiast tego nie pokaże, który z nich zawiera katalog wymieniony jako pierwszy w PATHzmiennej środowiskowej? Dlaczego działające python3zawsze uruchamiałoby najwyższą (pod) wersję python3, która jest zainstalowana? Czy też w praktyce nie pokaże żadnej wersji, na którą /usr/bin/python3wskazuje dowiązanie symboliczne, która nie musi być najnowsza?
Eliah Kagan
@Eliah Nie mam pojęcia, ale niektóre programy biorą to stamtąd, a inne od /usr/binjednego ...
Tim
2
Cóż, jeśli chodzi o faktycznie uruchomione programy w języku Python, w zależności od sposobu ich uruchomienia można użyć linii hashbang, aby określić, który python działa jako interpreter ( szczegóły ; zwróć również uwagę na użycie envlinii hashbang w celu znalezienia dowolnego interpretowanego systemu) -preferred w powszechne w skryptów Pythona ). Nie jestem pewien, czy to właśnie rozumiesz przez różnice między niektórymi programami a innymi.
Eliah Kagan
Nie, użytkownik powiedział, że bezczynny działał z wersją 3.4.0, a wiersz poleceń z wersją 3.4.1 ...
Tim
5

Możesz również sprawdzić wersję Pythona z samego kodu za pomocą platformmodułu ze standardowej biblioteki. Istnieją dwie funkcje: platform.python_version()(zwraca łańcuch) i platform.python_version_tuple()(zwraca krotkę). Scenariusz:

import platform

print(platform.python_version())
print(platform.python_version_tuple())

Bieganie:

$ python test.py 
3.4.1
('3', '4', '1')
$ python2.7 test.py 
2.7.8
('2', '7', '8')
Nykakin
źródło
3
Myślę, że częściej używa się sys.versionlub sys.version_info.
Matt Nordhoff,
5

Jeśli chcesz, aby wszystkie wersje Pythona były dostępne jako komendy, uruchom compgen -c python. Na przykład:

$ compgen -c python
python2.7
python3.4m
python3.4
python3m
python
python3
python2

Jeśli chcesz uzyskać wersję każdego z powyższych, oto jedna linijka:

$ for p in $(compgen -c python); do printf "%-16s" $p; $p --version; done
python2.7      Python 2.7.6
python3.4m     Python 3.4.3
python3.4      Python 3.4.3
python3m       Python 3.4.3
python         Python 2.7.6
python3        Python 3.4.3
python2        Python 2.7.6

Aktualizacja: python*-config

Zauważyłem, że python*-configprogramy nie obsługują --versionflagi. Na przykład:

$ python3-config --version
Usage: /usr/bin/python3-config --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir

Aby je odfiltrować grep -v, na przykład:

compgen -c python | grep -v -- '-config$'
wjandrea
źródło
To chyba najlepsza odpowiedź.
Solomon Vimal
2

Z łatwością otwórz terminal i wykonaj następujące czynności:

pisać

python

zweryfikować twoją wersję 2.x W moim przypadku pojawi się:

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

W wersji 3.x napisz:

python3

W moim przypadku pojawia się:

Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.

W obu przypadkach, aby wyjść z powłoki Pythona, napisz:

 exit()
Willington
źródło
1
  • W terminalu powłoki

    $ which -a pythonwyświetla wszystkie twoje python.

    $ which -a python2.7wyświetla wszystkie twoje python2.7.

    $ /usr/bin/python -Vpodaje informacje o wersji /usr/bin/python.

  • sprawdź w skrypcie python

oto ilustracja w powłoce ipython:

In [1]: import sys

In [2]: sys.version
2.7.11 |Anaconda 2.5.0 (64-bit)| (default, Dec  6 2015, 18:08:32) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]

In [3]: sys.version_info
sys.version_info(major=2, minor=7, micro=11, releaselevel='final', serial=0)

In [4]: sys.version_info >= (2,7)
Out[4]: True

In [5]: sys.version_info >= (3,)
Out[5]: False
Zawietrzny
źródło
zakładałem, python -vże zwróci wersję i wykonałem to jako root. wydrukował długą listę rzeczy, ale na górze napisał, installing zipimport hooka teraz wydaje się, że jestem w programie, z którego nie mam pojęcia, jak się wydostać, a co dopiero odinstalować? czy możesz mi pomóc tutaj
BugWhisperer