Quale versione di Python ho?


73

Come posso sapere quali versioni di Python ho?

Sto usando Ubuntu 14.04 (Trusty Tahr).


4
Inoltre, un modo rapido per vedere quali file binari Python sono installati è:ls /usr/bin | grep python
Tejas Kale

1
@TejasKale Meglio eseguirlo ls /usr/bin/python*(o ls /usr/bin/*python*se vuoi davvero file con python qualsiasi punto del nome). In questo modo, lsformatta ancora il suo output per un terminale (e ottieni più colonne e, con l' lsalias predefinito in Ubuntu, la colorazione).
Eliah Kagan,

Risposte:


86

Puoi usare python -V(et al.) Per mostrarti la versione di Python che il pythoncomando risolve. Se è tutto ciò di cui hai bisogno, hai finito. Ma vedere ogni versione di Python nel tuo sistema richiede un po 'di più.

In Ubuntu possiamo verificare la risoluzione con readlink -f $(which python). In casi predefiniti in 14.04 questo indicherà semplicemente /usr/bin/python2.7.

Possiamo concatenarlo per mostrare la versione di quella versione di Python:

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

Ma questo ci dice ancora qual è la nostra attuale pythonrisoluzione. Se fossimo in un Virtualenv (un comune sistema di gestione dello stack Python) pythonpotremmo risolvere una versione diversa:

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

Questo è un vero output.

Il fatto è che potrebbero esserci centinaia di versioni diverse di Python secrete attorno al tuo sistema, o su percorsi che vengono aggiunti contestualmente o che vivono con nomi binari diversi (come python3).

Se assumiamo che un binario Python venga sempre chiamato python<something>e sia un file binario, possiamo semplicemente cercare nell'intero sistema i file che soddisfano tali criteri:

$ 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

È ovviamente un comando piuttosto orribile, ma questo è di nuovo un vero output e sembra aver fatto un lavoro abbastanza approfondito.


Ricevo il seguente e non sono sicuro di cosa significhi: readlink: extra operand '/usr/bin/python2.7' Try 'readlink --help' for more information.
hello_there_andy,

ho pensato che python -vavrebbe restituito la versione ed eseguito questo come root. ha stampato un lungo elenco di cose, ma nella parte superiore ha detto installing zipimport hooke ora sembra che io sia in un programma da cui non ho idea di come uscire, figuriamoci disinstallare ?? mi potete aiutare qui
PrimitiveNom

2
@Anthony Il -Vflag per la versione fa distinzione tra maiuscole e minuscole. python -vmetterti in una console Python con i messaggi dettagliati attivati. Control + D per uscire. Oppure scrivi exit()e premi Invio.
Oli

@hello_there_andy Immagino che tu abbia fatto un refuso quando hai copiato il comando.
wjandrea,

63

Digitare quanto segue nel terminale ( Ctrl+ Alt+ T):

python -V

o

python --version

Puoi trovare un elenco di opzioni / parametri per molti comandi nel terminale digitando il comando seguito da --help

Esempio:

python --help

Manuali / manpages disponibili anche per la maggior parte delle quali CLI che possono essere visualizzati man <command>(Es: man python)

Da man python:

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

Esiste anche python3installato su molte macchine, quindi puoi fare:

python3 --version

per scoprire quale python 3.x stai eseguendo.


2
Vale la pena notare, poiché @Florian Diesch di seguito allude al fatto che probabilmente hai più versioni di "python". La chiamata predefinita "python" punta a un'installazione di python 2.7, anche se Ubuntu 14.04 viene fornito con python 3.0.
Mitch

32
python --version

e

python2 --version

mostra la versione di Python 2.x,

python3 --version

la versione installata di Python 3.x


8

Quando si esegue pythonnel terminale, produrrà un output in questo modo:

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

Vedi la prima riga - Python 2.7.6.

Anche correre python3. Ho 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.
>>>

Tuttavia, questo non li mostrerà tutti. Se hai 2 o più versioni di Python 3.Xx, vedrai solo l'ultima.

Di default il 14.04, hai 2.7.6 e 3.4.0. Come puoi vedere, ho aggiornato alla 3.4.1. So che ho ancora 3.4.0 perché quando vado a /usr/binvedere python3.4, e se corro /usr/bin/python3.4dalla riga di comando, ottengo 3.4.0 e l'esecuzione /usr/local/bin/python3.4mi dà 3.4.1

I miei pronomi sono Lui / Lui


"Se hai 2 o più versioni di Python 3.Xx, vedrai solo l'ultima." Non mostrerà invece quello che ha la sua directory di contenimento elencata per prima nella PATHvariabile d'ambiente? Perché l'esecuzione dovrebbe python3sempre eseguire la versione (sub) più alta di python3 installata? O, in pratica, non mostrerà quale versione /usr/bin/python3indica il collegamento simbolico, che non deve necessariamente essere l'ultima?
Eliah Kagan,

@Eliah Nessuna idea, ma alcuni programmi lo prendono da lì e altri da /usr/binquello ...
Tim

2
Bene, quando si tratta di eseguire effettivamente programmi Python, a seconda di come vengono eseguiti, la linea hashbang può essere utilizzata per determinare quale python funge da interprete ( dettagli ; notare anche l'uso di envlinee hashbang per trovare qualunque interpretato possa essere il sistema -preferito in comune negli script Python ). Non sono sicuro se questo è ciò che intendi per differenze tra alcuni programmi e altri.
Eliah Kagan,

No, un utente ha detto che il minimo funzionava con 3.4.0 e la riga di comando con 3.4.1 ...
Tim

5

Puoi anche controllare la versione di Python dal codice stesso usando il platformmodulo dalla libreria standard. Esistono due funzioni: platform.python_version()(restituisce stringa) e platform.python_version_tuple()(restituisce tupla). script:

import platform

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

In esecuzione:

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

3
Penso che sia più comune usare sys.versiono sys.version_info.
Matt Nordhoff,

5

Se vuoi vedere tutte le versioni di Python disponibili come comandi, esegui compgen -c python. Per esempio:

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

Se vuoi ottenere la versione di ognuna di queste, ecco una riga:

$ 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

Aggiornare: python*-config

Ho notato che i python*-configprogrammi non supportano la --versionbandiera. Per esempio:

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

Quindi puoi filtrarli con grep -v, ad esempio:

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

Questa dovrebbe essere la risposta migliore, immagino.
Solomon Vimal,

2

Apri facilmente il terminale e procedi come segue:

Scrivi

python

per verificare la tua versione 2.x Nel mio caso, apparirà:

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.

Per la 3.x, scrivi:

python3

Nel mio caso, sembra:

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.

Per entrambi i casi, per uscire dalla shell Python, scrivi:

 exit()

1
  • Nel terminale shell

    $ which -a pythonelenca tutti i tuoi python.

    $ which -a python2.7elenca tutti i tuoi python2.7.

    $ /usr/bin/python -Vfornisce informazioni sulla versione di /usr/bin/python.

  • controlla nello script di Python

ecco un'illustrazione nella shell 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

ho pensato che python -vavrebbe restituito la versione ed eseguito questo come root. ha stampato un lungo elenco di cose, ma nella parte superiore ha detto installing zipimport hooke ora sembra che io sia in un programma da cui non ho idea di come uscire, figuriamoci disinstallare ?? mi potete aiutare qui
PrimitiveNom
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.