web-dev-qa-db-fra.com

Détecter la version python dans un script shell

Je voudrais détecter si python est installé sur un système Linux et, le cas échéant, quelle version de python est installée.

Comment puis-je le faire? Y at-il quelque chose de plus gracieux que d’analyser la sortie de "python --version"?

64
TheRealNeo

Vous pouvez utiliser quelque chose dans les lignes suivantes:

$ python -c 'import sys; print(sys.version_info[:])'
(2, 6, 5, 'final', 0)

Le tuple est documenté ici . Vous pouvez développer le code Python ci-dessus pour formater le numéro de version de manière à répondre à vos besoins, voire pour le vérifier.

Vous devez vérifier $? dans votre script pour gérer le cas où python est introuvable.

P.S. J'utilise une syntaxe légèrement étrange pour assurer la compatibilité avec Python 2.x et 3.x.

66
NPE
python -c 'import sys; print sys.version_info'

ou, lisible par l'homme:

python -c 'import sys; print(".".join(map(str, sys.version_info[:3])))'
24
Fred Foo

Vous pouvez aussi utiliser ceci:

pyv="$(python -V 2>&1)"
echo "$pyv"
15
Jahid

J'ai utilisé la réponse de Jahid avec Extraire le numéro de version d'une chaîne Pour créer quelque chose d'écrit uniquement dans Shell. De plus, il ne renvoie qu'un numéro de version, et non le mot "Python". Si la chaîne est vide, Python n'est pas installé.

version=$(python -V 2>&1 | grep -Po '(?<=Python )(.+)')
if [[ -z "$version" ]]
then
    echo "No Python!" 
fi

Et imaginons que vous souhaitiez comparer le numéro de version pour savoir si vous utilisez une version à jour de Python. Utilisez ce qui suit pour supprimer les points du numéro de version. Ensuite, vous pouvez comparer les versions à l’aide d’opérateurs entiers, telles que "Je veux une version de Python supérieure à 2.7.0 et inférieure à 3.0.0" . Référence: $ {var // Pattern/Replacement} in http: // tldp .org/LDP/abs/html/substitution de paramètres.html

parsedVersion=$(echo "${version//./}")
if [[ "$parsedVersion" -lt "300" && "$parsedVersion" -gt "270" ]]
then 
    echo "Valid version"
else
    echo "Invalid version"
fi
10
Sohrab T

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

utiliser sys.hexversion pourrait être utile si vous voulez comparer la version dans un script shell

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
6
k2s

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

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

Ce module vous permet d’imprimer seulement une partie de la chaîne de version:

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

Voici une autre solution utilisant hash pour vérifier si python est installé et sed pour extraire les deux premiers nombres majeurs de la version et comparer si la version minimale est installée

if ! hash python; then
    echo "python is not installed"
    exit 1
fi

ver=$(python -V 2>&1 | sed 's/.* \([0-9]\).\([0-9]\).*/\1\2/')
if [ "$ver" -lt "27" ]; then
    echo "This script requires python 2.7 or greater"
    exit 1
fi
5
Lilás

Pour vérifier si TOUT Python est installé (vu que c'est sur PATH), c'est aussi simple que:

if which python > /dev/null 2>&1;
then
    #Python is installed
else
    #Python is not installed
fi

La partie > /dev/null 2>&1 est uniquement là pour supprimer la sortie.

Pour obtenir les numéros de version également:

if which python > /dev/null 2>&1;
then
    #Python is installed
    python_version=`python --version 2>&1 | awk '{print $2}'`
    echo "Python version $python_version is installed."

else
    #Python is not installed
    echo "No Python executable is found."
fi

Exemple de sortie avec Python 3.5 installé: "Python version 3.5.0 est installé."

Remarque 1: La partie awk '{print $2}' ne fonctionnera pas correctement si Python n'est pas installé. Vous devez donc utiliser la vérification comme dans l'exemple ci-dessus ou utiliser grep comme suggéré par Sohrab T . Bien que grep -P utilise la syntaxe Perl regexp et peut avoir des problèmes de portabilité.

Remarque 2: python --version ou python -V risque de ne pas fonctionner avec les versions de Python antérieures à 2.5. Dans ce cas, utilisez python -c ... comme suggéré dans d'autres réponses.

3
Nikita

En plus de la longue liste de solutions possibles, voici une solution similaire à la réponse acceptée - à ceci près qu’une simple vérification de version est intégrée:

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

cela retournera 0 si python est installé et au moins les versions 3.5, et retournera 1 si:

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

Pour vérifier la valeur, il suffit de comparer $?, comme indiqué dans les autres questions.

Attention, cela ne permet pas de vérifier différentes versions pour Python2 - car la ligne ci-dessus lève une exception dans Py2. Cependant, puisque Python2 est sur le point de sortir, cela ne devrait pas poser de problème.

2
nlsdfnbch