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"
?
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.
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])))'
Vous pouvez aussi utiliser ceci:
pyv="$(python -V 2>&1)"
echo "$pyv"
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
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
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
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
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
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.
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:
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.