PyLint, PyChecker ou PyFlakes?
J'aimerais faire quelques commentaires sur ces outils sur :
- caractéristiques;
- adaptabilité;
- la facilité d'utilisation et la courbe d'apprentissage.
- ce tag standard a à voir avec cela?
- Parce que vous utilisez ces outils pour correspondre à la PPE, en particulier la PEP 8, ce qui est la norme pour tous intégrés dans des modules Python.
- et ce que les autres peps voulez-vous le match? parce que, pour la pep-8 il y a clairement une balise stackoverflow.com/questions/tagged/pep8
- Vous avez raison, je vais passer à pep8
- Ne pas le titre soit modifié pour inclure pep8 comme une option? Au début, j'ai pensé à vous les gars étaient en train de parler au sujet de la proposition, n'est pas une véritable PyPI paquet.
- Je vous suggère de commencer avec quelque chose de très stricte, de le rendre moins stricte au premier pour évidemment douloureux cas, l'utiliser pendant un certain temps, puis obtenir plus stricte, plus tard, par l'addition de règles (pas tous en même temps). Faire lentement mais faire.
- Le simple fait de mentionner
prospector
😉
Vous devez vous connecter pour publier un commentaire.
Bien, je suis un peu curieux, alors je viens de tester les 3 moi-même droit après avoir posé la question 😉
Ok, ce n'est pas très grave, mais voici ce que je peux dire :
J'ai essayé les outils avec les paramètres par défaut (c'est important parce que vous pouvez très bien choisir votre chèque de règlement) sur le script suivant :
Comme un résultat :
PyChecker
est problématique, car il compile le module pour l'analyser. Si vous ne voulez pas que votre code à exécuter (e.g, il effectue une requête SQL), c'est mauvais.PyFlakes
est censé être lite. En effet, il a décidé que le code a été parfait. Je suis à la recherche de quelque chose de très grave donc je ne pense pas que je vais y aller.PyLint
a été très bavard et a classé le code 3/10 (OMG, je suis un sale programmeur !).Points forts de
PyLint
:Les inconvénients de
PyLint
:Corrigé le script (avec lazy doc chaînes et les noms de variables) :
EDIT :
Grâce à Rudiger Loup, j'ai découvert
pep8
qui fait exactement ce que son nom suggère: correspondance PEP8. Il a trouvé plusieurs syntaxe non-n que PyLint n'a pas. MaisPyLint
trouvé des choses qui n'était pas spécifiquement liée à la PEP8, mais intéressant. Les deux outils sont intéressants et complémentaires.Finalement je vais utiliser à la fois car il y a vraiment faciles à installer (via les packages ou les setuptools) et le texte de sortie est donc facile de chaîne.
Pour vous donner une petite idée de leur sortie:
pep8:
PyLint:
pyflakes
etpep8
. Suggèrent fortement qu'il plus juste de l'aide de l'une ou de l'autre.if __name__ == '__main__':
ne coûte pas beaucoup 😉 .pylint -rn
pour éviter la sortie du rapportpep8 a été récemment ajouté à PyPi.
Il est maintenant très facile de contrôler vos code contre pep8.
Voir http://pypi.python.org/pypi/pep8
flake8
, il combine les deux et ajoute conditionnelle de la complexité, des travaux sur les répertoires et est généralement bonne.flake8
pour la première fois m'a appris que j'ai sauté à droite dans un projet sans avoir à apprendre que Python fortement préfère les espaces pour une raison quelconque. J'ai eu à utiliser--ignore W191
pour la sortie utile.pep8
sont maintenant appeléspycodestyle
; voir pypi.org/project/pycodestyle @cjm : python fortement préfère les espaces parce que c'est ce qui est spécifié par les lignes directrices de style. Les espaces ne sont pas nécessairement supérieur, mais la cohérence de l'ensemble de la communauté est un grand avantage, et la communauté a décidé sur des espaces, afin de le faire.:set et
(court pourexpandtabs
) et puis:retab
pour convertir tous les onglets dans le tampon courant dans les espaces. Il peut également être utile pour définirts=4 sts=4 sw=4
(tabstop
,softtabstop
,shiftwidth
) en premier. Dans la mesure où une approche générale, je préfère utiliser des editorconfig.org et ses plugins pour définir les paramètres dans une pension, de sorte que vous n'avez pas à vous soucier de la reconfiguration de votre éditeur pour les différentes bases de code.