Welche Version von Python habe ich?


73

Wie kann ich herausfinden, welche Versionen von Python ich habe?

Ich benutze Ubuntu 14.04 (Trusty Tahr).


4
Ein schneller Weg, um zu sehen, welche Python-Binärdateien installiert sind, ist:ls /usr/bin | grep python
Tejas Kale

1
@ TejasKale Besser auszuführen ls /usr/bin/python*(oder ls /usr/bin/*python*wenn Sie wirklich Dateien mit python irgendwo im Namen wollen). Auf diese Weise wird lsdie Ausgabe immer noch für ein Terminal formatiert (und Sie erhalten mehrere Spalten und, mit dem Standardalias lsin Ubuntu, die Kolorierung).
Eliah Kagan

Antworten:


86

Mit python -V(et al.) Können Sie die Version von Python anzeigen, in die der pythonBefehl aufgelöst wird. Wenn das alles ist, was Sie brauchen, sind Sie fertig. Aber um jede Version von Python in Ihrem System zu sehen, ist etwas mehr erforderlich.

In Ubuntu können wir die Auflösung mit überprüfen readlink -f $(which python). In Standardfällen in 14.04 zeigt dies einfach auf /usr/bin/python2.7.

Wir können dies verketten, um die Version dieser Python-Version anzuzeigen:

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

Dies sagt uns jedoch immer noch nur, was unsere aktuelle pythonEntschließung ist. Wenn Sie sich in einem Virtualenv-System (einem gängigen Python-Stack-Management-System) befinden, wird pythonmöglicherweise eine andere Version verwendet:

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

Das ist echte Leistung.

Tatsache ist, dass Hunderte verschiedener Versionen von Python in Ihrem System abgesondert sein können, entweder auf Pfaden, die kontextuell hinzugefügt wurden, oder unter verschiedenen binären Namen (wie python3).

Wenn wir davon ausgehen, dass eine Python-Binärdatei immer aufgerufen wird python<something>und eine Binärdatei ist, können wir einfach das gesamte System nach Dateien durchsuchen, die diesen Kriterien entsprechen:

$ 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

Es ist offensichtlich ein ziemlich abscheulicher Befehl, aber dies ist wieder eine echte Ausgabe und es scheint, dass er einen ziemlich gründlichen Job gemacht hat.


Ich bekomme folgendes und bin mir nicht sicher, was es bedeutet: readlink: extra operand '/usr/bin/python2.7' Try 'readlink --help' for more information.
Hallo_Da_Und

Ich nahm an, python -vwürde die Version zurückgeben und dies als root ausführen. es druckte eine lange Liste von Dingen aus, aber oben stand, installing zipimport hookund jetzt scheint es, als ob ich in einem Programm bin, von dem ich keine Ahnung habe, wie ich rauskomme, geschweige denn deinstallieren kann? kannst du mir hier
raushelfen

2
@Anthony Das -VFlag für die Version unterscheidet zwischen Groß- und Kleinschreibung. python -vVersetzen Sie sich in eine Python-Konsole, in der ausführliche Nachrichten aktiviert sind. Strg + D, um auszusteigen. Oder schreiben Sie exit()und drücken Sie die Eingabetaste.
Oli

@hello_there_andy Ich denke, Sie haben einen Tippfehler gemacht, als Sie den Befehl kopiert haben.
wjandrea

63

Geben Sie im Terminal Folgendes ein ( Ctrl+ Alt+ T):

python -V

oder

python --version

Sie finden eine Liste der Optionen / Parameter für viele Befehle im Terminal, indem Sie den Befehl gefolgt von --help eingeben

Beispiel:

python --help

Manuell / manpages auch für die meisten dieser CLI , die durch angezeigt werden kann man <command>(Beispiel: man python)

Von man python:

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

Es ist auch python3auf vielen Computern installiert, so dass Sie Folgendes tun können:

python3 --version

um herauszufinden, welches Python 3.x Sie ausführen.


2
Es ist erwähnenswert, wie @Florian Diesch unten anspielt, dass Sie wahrscheinlich mehrere Versionen von "Python" haben. Der Standardaufruf "Python" verweist auf eine Installation von Python 2.7, obwohl Ubuntu 14.04 auch mit Python 3.0 geliefert wird.
Mitch

32
python --version

und

python2 --version

zeige die Version von Python 2.x,

python3 --version

die installierte Version von Python 3.x


8

Wenn Sie pythonim Terminal laufen , wird die Ausgabe folgendermaßen aussehen:

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.
>>> 

Siehe die erste Zeile - Python 2.7.6.

Laufen Sie auch python3. Ich habe 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.
>>>

Dies zeigt Ihnen jedoch nicht alle. Wenn Sie 2 oder mehr Python 3.Xx-Versionen haben, wird nur die neueste Version angezeigt.

Standardmäßig haben Sie am 14.04 2.7.6 und 3.4.0. Wie Sie sehen, habe ich auf 3.4.1 aktualisiert. Ich weiß, dass ich noch 3.4.0 habe, denn wenn ich zu /usr/binsehe python3.4, und wenn ich /usr/bin/python3.4in der Befehlszeile laufe , bekomme ich 3.4.0 und beim Laufen bekomme /usr/local/bin/python3.4ich 3.4.1

Meine Pronomen sind Er / Ihn


"Wenn Sie 2 oder mehr Python 3.Xx-Versionen haben, sehen Sie nur die neueste." Wird nicht stattdessen angezeigt, welches Verzeichnis zuerst in der PATHUmgebungsvariablen aufgeführt ist? Warum sollte beim Ausführen python3immer die höchste (Unter-) Version von python3 ausgeführt werden, die installiert ist? Oder wird in der Praxis nicht die Version /usr/bin/python3angezeigt, auf die der symbolische Link verweist, die nicht die neueste sein muss?
Eliah Kagan

@Eliah Keine Ahnung, aber einige Programme nehmen es von dort und andere von dem /usr/bineinen ...
Tim

2
Nun, wenn es darum geht, Python-Programme tatsächlich auszuführen, kann abhängig davon, wie sie ausgeführt werden, die Hashbang-Zeile verwendet werden, um zu bestimmen, welche Python- Zeile als Interpreter fungiert ( Details ; beachten Sie auch die Verwendung envin Hashbang-Zeilen , um das jeweils interpretierte System zu finden) -preferred in gemeinsam in Python - Skripten ). Ich bin mir nicht sicher, ob Sie das mit Unterschieden zwischen einigen Programmen und anderen meinen.
Eliah Kagan

Nein, ein Benutzer sagte, dass Leerlauf mit 3.4.0 und Befehlszeile mit 3.4.1 lief ...
Tim

5

Sie können die Python-Version auch über den Code selbst mit dem platformModul aus der Standardbibliothek überprüfen . Es gibt zwei Funktionen: platform.python_version()(gibt einen String zurück) und platform.python_version_tuple()(gibt ein Tupel zurück). Skript:

import platform

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

Laufen:

$ python test.py 
3.4.1
('3', '4', '1')
$ python2.7 test.py 
2.7.8
('2', '7', '8')

3
Ich denke, es ist üblicher, sys.versionoder zu verwenden sys.version_info.
Matt Nordhoff

5

Wenn Sie alle Python-Versionen als Befehle anzeigen möchten, führen Sie Folgendes aus compgen -c python. Z.B:

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

Wenn Sie die Version von jedem der oben genannten erhalten möchten, ist hier ein Einzeiler:

$ 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

Aktualisieren: python*-config

Mir ist aufgefallen, dass python*-configProgramme das --versionFlag nicht unterstützen . Zum Beispiel:

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

So könnten Sie sie herausfiltern grep -v, zum Beispiel mit:

compgen -c python | grep -v -- '-config$'

Dies sollte die beste Antwort sein, denke ich.
Solomon Vimal

2

Öffnen Sie einfach das Terminal und gehen Sie wie folgt vor:

Schreiben

python

So überprüfen Sie Ihre 2.x-Version In meinem Fall wird Folgendes angezeigt:

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.

Für das 3.x schreiben Sie:

python3

In meinem Fall sieht es so aus:

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.

In beiden Fällen schreiben Sie, um die Python-Shell zu verlassen:

 exit()

1
  • Im Shell-Terminal

    $ which -a pythonlistet alle deine python.

    $ which -a python2.7listet alle deine python2.7.

    $ /usr/bin/python -Vgibt Auskunft über die Version von /usr/bin/python.

  • Python-Skript einchecken

Hier ist eine Illustration in der Ipython-Shell:

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

Ich nahm an, python -vwürde die Version zurückgeben und dies als root ausführen. es druckte eine lange Liste von Dingen aus, aber oben stand, installing zipimport hookund jetzt scheint es, als ob ich in einem Programm bin, von dem ich keine Ahnung habe, wie ich rauskomme, geschweige denn deinstallieren kann? kannst du mir hier
raushelfen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.