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"
?
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"
?
Pour vérifier si TOUT Python est installé (en considérant qu'il est sur le PATH), c'est aussi simple que :
if which python > /dev/null 2>&1;
then
#Python is installed
else
#Python is not installed
fi
El > /dev/null 2>&1
est là juste pour supprimer la sortie.
Pour obtenir également les numéros de version :
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é".
Note 1 : Le awk '{print $2}'
ne fonctionnera pas correctement si Python n'est pas installé, il faut donc soit l'utiliser à l'intérieur de la vérification comme dans l'exemple ci-dessus, soit utiliser grep
comme suggéré par Sohrab T . Bien que grep -P
utilise la syntaxe regexp de Perl et peut avoir quelques problèmes de portabilité.
Note 2 : python --version
o python -V
peut 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.
Si vous avez besoin d'un script bash script, qui renvoie "NoPython" si Python n'est pas installé, et avec la référence Python s'il est installé, alors vous pouvez utiliser ce qui suit check_python.sh
script.
my_app.sh
.PYTHON_MINIMUM_MAJOR
y PYTHON_MINIMUM_MINOR
check_python.sh
#!/bin/bash
# Set minimum required versions
PYTHON_MINIMUM_MAJOR=3
PYTHON_MINIMUM_MINOR=6
# Get python references
PYTHON3_REF=$(which python3 | grep "/python3")
PYTHON_REF=$(which python | grep "/python")
error_msg(){
echo "NoPython"
}
python_ref(){
local my_ref=$1
echo $($my_ref -c 'import platform; major, minor, patch = platform.python_version_tuple(); print(major); print(minor);')
}
# Print success_msg/error_msg according to the provided minimum required versions
check_version(){
local major=$1
local minor=$2
local python_ref=$3
[[ $major -ge $PYTHON_MINIMUM_MAJOR && $minor -ge $PYTHON_MINIMUM_MINOR ]] && echo $python_ref || error_msg
}
# Logic
if [[ ! -z $PYTHON3_REF ]]; then
version=($(python_ref python3))
check_version ${version[0]} ${version[1]} $PYTHON3_REF
elif [[ ! -z $PYTHON_REF ]]; then
# Didn't find python3, let's try python
version=($(python_ref python))
check_version ${version[0]} ${version[1]} $PYTHON_REF
else
# Python is not installed at all
error_msg
fi
my_app.sh
#!/bin/bash
# Add this before your app's code
PYTHON_REF=$(source ./check_python.sh) # change path if necessary
if [[ "$PYTHON_REF" == "NoPython" ]]; then
echo "Python3.6+ is not installed."
exit
fi
# This is your app
# PYTHON_REF is python or python3
$PYTHON_REF -c "print('hello from python 3.6+')";
Une autre façon d'imprimer la version de Python d'une manière lisible par une machine avec les numéros de version majeure et mineure uniquement. Par exemple, au lieu de "3.8.3", il affichera "38", et au lieu de "2.7.18", il affichera "27".
python -c "import sys; print(''.join(map(str, sys.version_info[:2])))"
Fonctionne à la fois pour Python 2 et 3.
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.
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 utiliserpython -V
.