스택큐힙리스트

Pylint, PyChecker 또는 PyFlakes? [닫힘] 본문

카테고리 없음

Pylint, PyChecker 또는 PyFlakes? [닫힘]

스택큐힙리스트 2023. 4. 13. 01:42
반응형

현재 이 질문은 우리의 Q&A 형식에 적합하지 않습니다. 답변은 사실, 참조, 또는 전문 지식으로 지원되어야 하지만, 이 질문은 논쟁, 논쟁, 투표 또는 확장된 토론을 유도할 가능성이 높습니다. 이 질문이 개선될 가능성이 있다고 느낀다면 가능한 경우 #$!^&! @ * $&을(를) 통해 지침을 받으십시오.

10년 전에 닫혔습니다.

이 도구들에 대한 피드백을 받고 싶습니다.

특징;

적응능력;

사용 용이성과 학습 곡선.

답변 1

음, 조금 궁금해서 질문한 후에 내가 직접 세 가지를 시험해 봤어요. :-)

좋아요, 이것은 매우 진지한 리뷰는 아니지만, 제가 말할 수 있는 것은 다음과 같습니다.

저는 다음 스크립트에서 기본 설정으로 도구를 시도해 보았습니다 (체크 규칙을 거의 선택할 수 있기 때문에 중요합니다).

#!/usr/local/bin/python

# by Daniel Rosengren modified by e-satis

import sys, time

stdout = sys.stdout

BAILOUT = 16

MAX_ITERATIONS = 1000

class Iterator(object) :

def __init__(self):

print 'Rendering...'

for y in xrange(-39, 39):

stdout.write('\n')

for x in xrange(-39, 39):

if self.mandelbrot(x/40.0, y/40.0) :

stdout.write(' ')

else:

stdout.write('*')

def mandelbrot(self, x, y):

cr = y - 0.5

ci = x

zi = 0.0

zr = 0.0

for i in xrange(MAX_ITERATIONS) :

temp = zr * zi

zr2 = zr * zr

zi2 = zi * zi

zr = zr2 - zi2 + cr

zi = temp + temp + ci

if zi2 + zr2 > BAILOUT:

return i

return 0

t = time.time()

Iterator()

print '\nPython Elapsed %.02f' % (time.time() - t)

결과적으로:

PyChecker은(는) 분석 모듈을 컴파일하기 때문에 문제가 됩니다. 코드를 실행하고 싶지 않을 경우(예: SQL 쿼리 수행), 그것은 나쁜 것입니다.

PyFlakes 는 가벼워야 한다고 생각되었습니다. 실제로, 그것은 코드가 완벽하다고 결정했습니다. 그렇기 때문에 제가 찾는 것은 꽤 심각한 것이기 때문에 그것을 선택하지 않을 것 같습니다.

PyLint는 매우 수다스럽고 코드를 3/10으로 평가했습니다 (어떻게 이래, 나는 더러운 코더인가요!).

PyLint의 강점:

매우 세밀하고 정확한 보고서입니다.

일부 코드 스멜을 감지합니다. 이것은 OO 접근 방식이 이 경우에는 쓸모 없다는 이유로 클래스를 삭제하고 함수로 쓰기를 권장했습니다. 저는 그것을 알고 있었지만 컴퓨터가 그렇게 권장할 줄은 예상하지 못했습니다 :-p

완전히 수정된 코드는 더 빨리 실행됩니다 (클래스가 없으며 참조 바인딩이 없습니다...).

프랑스 팀이 만들었습니다. 모두에게는 좋지는 않겠지만, 저는 좋아합니다 ;-)

Pylint의 단점:

일부 규칙은 정말 엄격합니다. PEP8에 매칭되는 기본값을 변경할 수 있다는 것은 알지만, 'for x in seq'와 같은 방식으로 쓰는 것이 범죄인가요? 아마도 그렇습니다. 왜냐하면 3개 이하의 글자 수로 변수 이름을 쓸 수 없기 때문입니다. 제가 이것을 변경하겠습니다.

매우 매우 수다스러워요. 눈을 사용할 준비를 해주세요.

문서 문자열과 변수 이름이 부족한 수정된 스크립트:

#!/usr/local/bin/python

# by Daniel Rosengren, modified by e-satis

Module doctring

import time

from sys import stdout

BAILOUT = 16

MAX_ITERATIONS = 1000

def mandelbrot(dim_1, dim_2):

function doc string

cr1 = dim_1 - 0.5

ci1 = dim_2

zi1 = 0.0

zr1 = 0.0

for i in xrange(MAX_ITERATIONS) :

temp = zr1 * zi1

zr2 = zr1 * zr1

zi2 = zi1 * zi1

zr1 = zr2 - zi2 + cr1

zi1 = temp + temp + ci1

if zi2 + zr2 > BAILOUT:

return i

return 0

def execute() :

func doc string

print 'Rendering...'

for dim_1 in xrange(-39, 39):

stdout.write('\n')

for dim_2 in xrange(-39, 39):

if mandelbrot(dim_1/40.0, dim_2/40.0) :

stdout.write(' ')

else:

stdout.write('*')

START_TIME = time.time()

execute()

print '\nPython Elapsed %.02f' % (time.time() - START_TIME)

Thanks to Rudiger Wolf, 나는 이름 그대로 PEP8을 일치시키는 것을 정확히 수행하는 pep8 을 발견했다. 그것은 Pylint에서 찾지 못한 여러 구문 오류를 발견했다. 그러나 Pylint는 PEP8과 직접적으로 관련되지 않았지만 흥미로운 것을 발견했다. 두 도구 모두 흥미롭고 보완적이다.

결국 둘 다 사용할 것입니다. 패키지 또는 setuptools를 통해 매우 쉽게 설치할 수 있으며 출력 텍스트를 연결하기가 매우 쉽기 때문입니다.

그들의 생산성을 알려드리면:

펩8:

./python_mandelbrot.py:4:11: E401 multiple imports on one line

./python_mandelbrot.py:10:1: E302 expected 2 blank lines, found 1

./python_mandelbrot.py:10:23: E203 whitespace before ':'

./python_mandelbrot.py:15:80: E501 line too long (108 characters)

./python_mandelbrot.py:23:1: W291 trailing whitespace

./python_mandelbrot.py:41:5: E301 expected 1 blank line, found 3

Pylint:

************* Module python_mandelbrot

C: 15: Line too long (108/80)

C: 61: Line too long (85/80)

C: 1: Missing docstring

C: 5: Invalid name stdout (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)

C: 10:Iterator: Missing docstring

C: 15:Iterator.__init__: Invalid name y (should match [a-z_][a-z0-9_]{2,30}$)

C: 17:Iterator.__init__: Invalid name x (should match [a-z_][a-z0-9_]{2,30}$)

[...] and a very long report with useful stats like :

Duplication

-----------

+-------------------------+------+---------+-----------+

| |now |previous |difference |

+=========================+======+=========+===========+

|nb duplicated lines |0 |0 |= |

+-------------------------+------+---------+-----------+

|percent duplicated lines |0.000 |0.000 |= |

+-------------------------+------+---------+-----------+

답변 2

안녕하세요! 오늘은 Pylint, PyChecker, PyFlakes 세 가지 Python 코드 검사 도구 중 어떤 것을 사용해야 할지에 대한 이야기를 나눠보려고 합니다.

먼저, 이 세 가지 도구는 모두 Python 코드를 분석하고 이상 유무를 검증하는 도구입니다. 그러나 각각의 특징이 다르기 때문에 어떤 도구를 사용할지에 대해서는 고민이 필요합니다.

Pylint는 코드 스타일과 오류를 검사하는 데에 특화된 도구입니다. 이 도구는 코드 품질을 향상시키고 유지보수를 쉽게 할 수 있도록 도와줍니다. 또한 코드 타입, 변수 이름, 함수 이름 등의 규칙을 따르도록 강제할 수 있는 기능도 제공해주기 때문에 프로젝트에 일관성 있는 스타일을 유지하는 데에도 좋습니다.

PyChecker는 코드 오류를 찾아주는 역할을 합니다. 코드를 실행하기 전에 오류를 검출하기 때문에 디버깅 시간을 줄일 수 있습니다. 이 도구는 미리 정의된 오류 패턴을 바탕으로 코드를 검사하므로 유지보수나 리팩토링 시에도 유용합니다.

마지막으로, PyFlakes는 가장 단순한 코드 검사 도구입니다. 코드에 대한 정적 분석을 수행하므로, 실행하지 않고도 코드 일관성이나 오류를 검증할 수 있습니다. 코드 리뷰나 코드 스타일 검사에 사용하기 용이합니다.

따라서, 어떤 도구를 사용할지는 프로젝트의 목적과 용도에 따라 달라질 수 있습니다. 이상입니다!

반응형
Comments