Question

Existe-t-il quelque chose de similaire à Pylint qui examine un script Python (ou l'exécute) et détermine la version de Python requise par chaque ligne (ou fonction)?

Par exemple, utilisation théorique:

$ magic_tool <EOF
with something:
    pass
EOF
1: 'with' statement requires Python 2.6 or greater

$ magic_tool <EOF
class Something:
    @classmethod
    def blah(cls):
        pass
EOF
2: classmethod requires Python 2.2 or greater
$ magic_tool <EOF
print """Test
"""
EOF
1: Triple-quote requires Python 1.5 of later

Une telle chose est-elle possible? Je suppose que le moyen le plus simple serait d’avoir toutes les versions de Python sur le disque, d’exécuter le script avec chacune d’elles et de voir quelles erreurs se produisent.

Était-ce utile?

La solution

Inspiré par cette excellente question, j’ai récemment mis en place un script qui tente de le faire. Vous pouvez le trouver sur github à l'adresse pyqver .

C’est assez complet, mais certains aspects ne sont pas encore traités (comme indiqué dans le fichier README). N'hésitez pas à fourcher et à l'améliorer!

Autres conseils

Ce n'est pas une réponse utile, mais ici, ça va quand même. Je pense que cela devrait être faisable (bien que probablement un exercice), par exemple, vous pourriez vous assurer que vous avez toutes les grammaires officielles des versions que vous voulez vérifier, comme celui-ci .

Ensuite, analysez le bit de code commençant par la première version de la grammaire. Ensuite, vous avez besoin d’une mappe similaire de tous les espaces de noms de modules intégrés et d’analyser à nouveau le code en commençant par la version la plus ancienne, bien qu’il puisse être difficile de faire la différence entre les modules intégrés et les modules externes ou similaires, comme ElementTree.

Le résultat devrait être un aperçu des versions qui prennent en charge la syntaxe du code et un aperçu des modules, ainsi que la version (le cas échéant) nécessaire pour l’utiliser. Avec ce résultat, vous pouvez calculer la meilleure version la plus basse et la plus haute.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top