2009-08-23 12 views
17

मैं अजगर में कोडिंग शैली की जांच करने के लिए एक उपकरण खोजने की कोशिश कर रहा हूं।पायथन कोड शैली/मानकों को लागू करने के लिए टूल

PHP के लिए मैंने देखा है कि कोड स्निफर है, और ड्रूपल द्वारा उपयोग किया गया एक छोटा perl script है। क्या पाइथन कोड के लिए ऐसा कोई उपकरण है?

+0

मुझे अभी pep8.py के बारे में पता चला है, लेकिन पृष्ठ लोड नहीं होता है। हालांकि यह अभी भी Google कैश में है http://74.125.93.132/search?q=cache:-sI5YpbDc9MJ:svn.browsershots.org/trunk/devtools/pep8/pep8.py+pep8.py क्या यह एकमात्र टूल है ? क्या कोई और बेहतर है? – solarc

उत्तर

35

अतीत में मैंने मुख्य रूप से PyLint का उपयोग किया है - जब आप एक अपरिभाषित चर का उपयोग करते हैं तो यह हाइलाइट कर सकता है, जब आप उन्हें उपयोग किए बिना चीजें आयात करते हैं और इसी तरह।

यह थोड़ा वर्बोज़ हो सकता है, जो 80 वर्णों से अधिक लंबी लाइनों के बारे में शिकायत कर रहा है, परिवर्तनीय विशिष्ट रेगेक्स से मेल नहीं खा रहा है, कक्षाओं में बहुत कम सार्वजनिक विधियां हैं, विधियों को डॉक्स-ट्रिंग याद आ रही है।

उदाहरण के लिए, स्क्रिप्ट के लिए ..

import os 
import somefakelib 

def myfunc(x): 
    blah = "Something" 
    print os.listdir(x+blh) 

PyLint निम्न संदेश उत्पन्न करता है:

C: 1: Missing docstring 
F: 2: Unable to import 'somefakelib' (No module named somefakelib) 
C: 4:myfunc: Missing docstring 
C: 4:myfunc: Invalid name "x" (should match [a-z_][a-z0-9_]{2,30}$) 
C: 4:myfunc: Invalid name "x" (should match [a-z_][a-z0-9_]{2,30}$) 
E: 6:myfunc: Undefined variable 'blh' 
W: 5:myfunc: Unused variable 'blah' 
W: 2: Unused import somefakelib 

वे सभी वैध शिकायतों हैं, लेकिन मैं सम्मेलन और पुनर्रचना के बहुत से संदेश को निष्क्रिय करने के लिए करते हैं । तुम्हें पता है, विशिष्ट संदेशों निष्क्रिय कर सकते हैं या तो के रूप में अपने कोड में टिप्पणियां:

#pylint:disable-msg=R0903,C0103,R0903,F0401,C0301 

PyLint आदेश को आदेश पंक्ति तर्क के रूप में ..or:

pylint --disable-msg=R0903,C0103,R0903,F0401,C0301 myfile.py 
अक्षम ऊपर गए संदेशों के साथ

, यह निम्न संदेश जनरेट करता है ऊपर दिए गए कोड के लिए:

C: 1: Missing docstring 
C: 4:myfunc: Missing docstring 
E: 6:myfunc: Undefined variable 'blh' 
W: 5:myfunc: Unused variable 'blah' 
W: 2: Unused import somefakelib 

PyLint भी एक "कोड रिपोर्ट", कोड/टिप्पणी/docstring/खाली स्थान के फ़ाइल है, प्रति-सी संदेशों की संख्या में से कितने लाइनों सहित उत्पन्न करता है ategory, और आपके कोड को "स्कोर" देता है - 10 कोई संदेश नहीं होता है, 0 आमतौर पर एक वाक्यविन्यास त्रुटि

एक और विकल्प PyFlakes है, जो मुझे थोड़ा कम वर्बोज़ मिलता है (मैंने हाल ही में इसे स्थान पर उपयोग करना शुरू कर दिया है Pylint के)। फिर इसके बाद के संस्करण स्क्रिप्ट का उपयोग कर, PyFlakes निम्न संदेश देता है:

example.py:2: 'somefakelib' imported but unused 
example.py:6: undefined name 'blh' 

अंतिम विकल्प का उपयोग मैं pep8.py, के रूप में नाम का सुझाव PEP8 लागू करता है जो है। यह अब तक का सबसे अधिक है .. पैडेंटिक स्क्रिप्ट, कार्यों/कक्षाओं के पहले/बाद में सही रिक्त रेखाओं जैसी चीजों को लागू करना, कोड के चारों ओर घूमना, सही 4-स्पेस इंडेंटेशन आदि।

ऊपर कोड पर चल रहा है, यह पैदा करता है निम्नलिखित:

example.py:4:1: E302 expected 2 blank lines, found 1 
example.py:6:23: E201 whitespace after '(' 
example.py:6:32: W292 no newline at end of file 

यह ज्यादातर सही खाली स्थान के तरह शैलीगत चीजों को लागू करता है, यह PyLint या PyFlakes की तरह कोड के ज्यादा स्थिर-विश्लेषण नहीं करता है, तो मैं या तो Pylint या PyFlakes के संयोजन के साथ pep8.py का उपयोग करें।

pep8.py मूल रूप python mailing list here पर घोषणा की गई थी, लेकिन इस में डाउनलोड लिंक अब मर चुका है .. वहाँ github.com/cburroughs/pep8.py पर कुछ मामूली सुधारों के साथ, cburroughs द्वारा एक GitHub दर्पण है, या आप an older revision

से असंशोधित संस्करण प्राप्त कर सकते हैं

PyChecker, एक और विकल्प है, हालांकि मैं का उपयोग नहीं किया है यह

+0

वाह, स्पष्टीकरण के लिए लिया गया समय के लिए kudos – solarc

2

reindent.py नामक एक स्क्रिप्ट है जिसे कभी-कभी आपके सिस्टम के पायथन वितरण में शामिल किया जाता है जो आपके सभी कोड को अनुशंसित 4 रिक्त स्थान इंडेंटिंग के माध्यम से चलाएगा और फिर से इंडेंट करेगा।

यहाँ मामले में इसकी एक प्रति आप इसे अपने वितरण में नहीं मिल सकता है: http://www.koders.com/python/fid24D30FCD2CE388C67CB980EF55630D25970CFB96.aspx?s=cdef%3Aparser

+0

धन्यवाद, हालांकि यह सिर्फ एक चीज की जांच करता है, यह काम में आ जाएगा। – solarc

12

pylint और pyflakes एक अच्छी शुरुआत होगी।

विशेष रूप से पिलिंट बहुत विन्यास योग्य है, और आप इसके साथ कुछ चीजों को लागू कर सकते हैं।

+0

ग्रेट, ठीक वही लगता है जो मैं देख रहा हूं :) – solarc

+0

pyflakes से लिंक टूटा हुआ है – Stefan

4

इस stackoverflow सवाल मिले, जबकि एक pep8 शैली प्रवर्तन उपकरण के लिए खोज जब एक मौजूदा (विरासत) परियोजना के ऊपर ले जा।

https://github.com/hhatto/autopep8

autopep8 -i yourpythonsourcefile.py 

स्वतः सभी स्रोत pep8 साथ पुष्टि करने के लिए कोड में परिवर्तित कर देंगे। इसे मेरी विरासत परियोजना पर आज़माया और यह बहुत अच्छा काम करता है। तो मैंने सोचा कि मैं इस जवाब को यहां SO अपडेट कर दूंगा।

संबंधित मुद्दे