2
votes

Comment s'assurer que le script est exécuté par une version spécifique de python?

Comme la question le demande, je veux être sûr que le script est exécuté par une version spécifique de python, disons => 3.5.2.

Comment puis-je m'assurer que le script, lorsqu'il est exécuté, est appelé par la version spécifique.

Cette vérification doit être effectuée dans le script python lui-même.

Il pourrait être préférable que la solution soit indépendante de la plate-forme.


5 commentaires

Vérifiez celui-ci: stackoverflow.com/questions/1093322/...


@Sanyash Je me demande comment on peut se redéfinir comme duplicata s'il est manqué la première fois.


@ayorgo Désolé, je ne sais pas, peut-être devriez-vous le poser sur meta. Btw, d'après mon expérience, votre mauvais drapeau de dupe sera marqué comme utile si la question sera fermée. Ainsi, vous pouvez simplement modifier votre commentaire comme vous l'avez fait.


Honnêtement, Sanyash a pu mieux comprendre ma question et c'est un lien correct vers la question.


Duplication possible de Comment faire en sorte que Shebang puisse choisir le bon interpréteur Python entre python3 et python3.5 . Voir également Une raison de ne pas utiliser / usr / bin / env python2 / python3 explicitement?


3 Réponses :


1
votes

Vous pouvez vérifier la version en appelant sys.version_info . Cela vous donnera un tuple sous la forme sys.version_info (major = 3, minor = 6, micro = 5, releaselevel = 'final', serial = 0) .


4 commentaires

Je veux être sûr que le python appelé est supérieur à la version fournie, ne pas vérifier si python 3.6.5 est installé, cette vérification serait-elle effectuée par ceci?


Vous pouvez comparer la sortie de sys.version_info avec ce que vous voulez. sys.version_info vous donnera des informations sur la version de python en cours d'exécution.


par exemple. sys.version_info.major> = 3 et sys.version_info.minor> = 5 et sys.version_info.micro> = 2 (bien que ce ne soit pas exactement l'expression booléenne souhaitée, vous devez quand même ajouter des vérifications pour par exemple 3.6.1)


en fait, la réponse de @ ruohola a une bien meilleure façon de les comparer



5
votes

Ajoutez simplement ceci au début de votre script:

MIN = (3,)
MIN = (3, 5)
MIN = (3, 5, 2)

Ou si vous préférez sans assert:

Traceback (most recent call last):
  File "main.py", line 6, in <module>
    "Python version too low, required at least {}".format('.'.join(str(n) for n in MIN)))
OSError: Python version too low, required at least 3.5.2

Ou un peu plus verbalement, mais cela informera en fait l'utilisateur de la version dont il a besoin:

import sys

MIN = (3, 5, 2)
if not sys.version_info >= MIN:
    raise EnvironmentError(
        "Python version too low, required at least {}".format('.'.join(str(n) for n in MIN)))

Exemple de sortie:

import sys

if not sys.version_info >= (3, 5, 2):
    raise EnvironmentError("Python version too low.")

Le tuple de version minimum spécifié peut être aussi précis que vous le souhaitez. Ceux-ci sont tous valides:

import sys

assert sys.version_info >= (3, 5, 2), "Python version too low."


3 commentaires

@brunns Oui, très vrai, j'ai édité une autre façon de le faire.


Pas un test parfait. assert sys.version_info> = (3, 8) renvoie SyntaxError: syntaxe invalide sur un python plus ancien car j'utilise l'opérateur morse (beaucoup plus tard dans le code).


@NO_NAME Vous ne pouvez pas éviter cela, la syntaxe sera toujours analysée et validée avant toute autre chose.



0
votes

Essayez :

if not sys.version_info >= (3, 5, 2):
    raise EnvironmentError()

Ou, mieux encore, une exception personnalisée avec un message utile,


0 commentaires