104 votes

Détecter la version de python dans le shell script.

J'aimerais détecter si python est installé sur un système Linux et si oui, quelle version de python est installée.

Comment puis-je le faire ? Existe-t-il quelque chose de plus gracieux que d'analyser la sortie de "python --version" ?

4 votes

Pourquoi python --version n'est pas gracieux ? Peut-être /usr/bin/env python --version ?

5 votes

Ce que je voulais dire par "non gracieux", c'est que le format de la chaîne peut changer à l'avenir, ce qui invaliderait l'analyse de la chaîne.

1 votes

Python 2.4 renvoie une erreur pour python --version . Vous devez utiliser python -V .

15voto

logc Points 1303

Vous pouvez utiliser le module de plateforme qui fait partie de la bibliothèque standard de Python :

$ python -c 'import platform; print(platform.python_version())'
2.6.9

Ce module vous permet pour n'imprimer qu'une partie de la chaîne de la version :

$ python -c 'import platform; major, minor, patch = platform.python_version_tuple(); print(major); print(minor); print(patch)'
2
6
9

0 votes

En effet, le module plaftorm semble être fait pour cela. Cependant, cela semble un peu inférieur à l'utilisation de sys.version_info car le module plaftorm n'est apparu que dans Python 2.3 alors que sys.version_info est apparu dans Python 2.0

9voto

Farsheed Points 397

Vous pouvez utiliser cette commande dans bash :

PYV=`python -c "import sys;t='{v[0]}.{v[1]}'.format(v=list(sys.version_info[:2]));sys.stdout.write(t)";`
echo $PYV

8voto

k2s Points 464

En utilisant sys.hexversion pourrait être utile si vous voulez comparer la version dans le shell script.

ret=`python -c 'import sys; print("%i" % (sys.hexversion<0x03000000))'`
if [ $ret -eq 0 ]; then
    echo "we require python version <3"
else 
    echo "python version is <3"
fi

6voto

nlsdfnbch Points 1223

Pour compléter la longue liste des solutions possibles, voici une solution similaire à la réponse acceptée, sauf qu'elle intègre un simple contrôle de version :

python -c 'import sys; exit(1) if sys.version_info.major < 3 and sys.version_info.minor < 5 else exit(0)'

ceci retournera 0 si python est installé et au moins des versions 3.5 et retourner 1 si :

  • Python n'est pas installé
  • Python EST installé, mais sa version est inférieure à la version 3.5

Pour vérifier la valeur, il suffit de comparer $? (en supposant que bash ), comme on l'a vu dans d'autres questions.

Attention, cela ne permet pas de vérifier les différentes versions pour les éléments suivants Python2 - car la phrase ci-dessus lèvera une exception dans Py2. Cependant, puisque Python2 est sur le point de disparaître, cela ne devrait pas être un problème.

5voto

Robert Lujo Points 2743

Détection de python version 2+ ou 3+ dans un shell script :

# !/bin/bash
ver=$(python -c"import sys; print(sys.version_info.major)")
if [ $ver -eq 2 ]; then
    echo "python version 2"
elif [ $ver -eq 3 ]; then
    echo "python version 3"
else 
    echo "Unknown python version: $ver"
fi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X