Pylintλ‘ Python μ½λμ νμ§κ³Ό μ μ§λ³΄μμ±μ ν₯μμν€μΈμ. μ€μΉ, ꡬμ±, λͺ¨λ² μ¬λ‘ λ° μ μΈκ³ κ°λ°μλ₯Ό μν μ€μ©μ μΈ μμ λ₯Ό λ€λ£Ήλλ€.
Pylint μ μ λΆμ: κΈλ‘λ² μννΈμ¨μ΄ κ°λ°μ μν μ½λ νμ§ νκ°
κΈλ‘λ² μννΈμ¨μ΄ κ°λ°μ λΉ λ₯΄κ² μ§ννλ νκ²½μμ λμ μ½λ νμ§μ μ μ§νλ κ²μ΄ κ°μ₯ μ€μν©λλ€. λ€μν λ¬Έν, μκ°λ λ° κ°λ° νμμ μΌκ΄λ μ½λ νμ§μ μ μ§λ³΄μμ±μ 보μ₯νκ³ , λ²κ·Έλ₯Ό μ€μ΄λ©°, νμ μ μ΄μ§ν©λλ€. μ μ λΆμ λꡬλ μ΄λ₯Ό λ¬μ±νλ λ° μ€μν μν μ νλ©°, Pylintλ μ μΈκ³ Python κ°λ°μλ₯Ό μν κ°λ ₯νκ³ λ€μ¬λ€λ₯ν μ΅μ μΌλ‘ λκ°μ λνλ λλ€.
μ μ λΆμμ΄λ 무μμ΄λ©° Pylintλ₯Ό μ¬μ©νλ μ΄μ λ 무μμ λκΉ?
μ μ λΆμμ μ½λλ₯Ό μ€ννμ§ μκ³ μμ€ μ½λλ₯Ό κ²μ¬νλ μννΈμ¨μ΄ ν μ€νΈ λ°©λ²μ λλ€. μ€νμΌ μλ°, νλ‘κ·Έλλ° μ€λ₯ λ° μ½λ λμμ κ°μ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νλ λ° λμμ΄ λ©λλ€. μ½λ κ²ν νλ‘μΈμ€λ₯Ό μλνν¨μΌλ‘μ¨ μ μ λΆμ λꡬλ μκ°μ μ μ½νκ³ , μ½λ κ°λ μ±μ κ°μ νλ©°, κ°λ° μ£ΌκΈ° μ΄κΈ°μ μ€λ₯λ₯Ό ν¬μ°©νμ¬ λ³΄λ€ κ°λ ₯νκ³ μ λ’°ν μ μλ μννΈμ¨μ΄λ₯Ό μ 곡ν©λλ€.
Pylintλ Pythonμ μν μΈκΈ° μλ μ μ λΆμ λꡬμ λλ€. Python μ½λλ₯Ό λΆμνκ³ λ€μμ ν¬ν¨ν λ€μν λ¬Έμ λ₯Ό νμΈν©λλ€.
- μ½λ© μ€νμΌ μλ°(μ: PEP 8 μ€μ)
- μ μ¬μ μ€λ₯(μ: μ μλμ§ μμ λ³μ, μ¬μ©νμ§ μλ κ°μ Έμ€κΈ°)
- μ½λ λμ(μ: κ³Όλνκ² λ³΅μ‘ν ν¨μ, κΈ΄ μ€)
- λλ½λ λ¬Έμ
Pylintλ ν¬κ΄μ μΈ κ²μ¬ μΈνΈλ₯Ό μ 곡νλ©° κ³ λλ‘ κ΅¬μ± κ°λ₯νμ¬ μ μΈκ³ κ°λ°μ λ° νμ΄ νΉμ μꡬ μ¬ν λ° μ½λ© νμ€μ λ§κ² μ‘°μ ν μ μμ΅λλ€.
Pylint μ€μΉ
Pylint μ€μΉλ κ°λ¨νλ©° Pythonμ ν¨ν€μ§ μ€μΉ νλ‘κ·Έλ¨μΈ pipλ₯Ό μ¬μ©νμ¬ μνν μ μμ΅λλ€. μ μ°¨λ μμΉλ κ°λ° νκ²½μ κ΄κ³μμ΄ λμΌν©λλ€.
ν°λ―Έλ λλ λͺ λ Ή ν둬ννΈλ₯Ό μ΄κ³ λ€μ λͺ λ Ήμ μ€νν©λλ€.
pip install pylint
μ΄λ κ² νλ©΄ Pylintμ ν΄λΉ μ’ μμ±μ΄ μ€μΉλ©λλ€. μ€μΉλ₯Ό νμΈνλ €λ©΄ λ€μμ μ€νν©λλ€.
pylint --version
μ΄λ κ² νλ©΄ μ€μΉλ Pylint λ²μ λ²νΈκ° νμλ©λλ€.
μ½λμμ Pylint μ€ν
Pylintκ° μ€μΉλλ©΄ Python μ½λμμ μ€ννμ¬ νμ§μ νκ°ν μ μμ΅λλ€. ν°λ―Έλμμ Python νμΌμ΄ ν¬ν¨λ λλ ν λ¦¬λ‘ μ΄λνμ¬ λ€μ λͺ λ Ήμ μ¬μ©ν©λλ€.
pylint your_file.py
your_file.py
λ₯Ό Python νμΌμ μ΄λ¦ λλ Python νμΌμ΄ ν¬ν¨λ λλ ν λ¦¬λ‘ λ°κΏλλ€. Pylintλ μ½λλ₯Ό λΆμνκ³ κ²°κ³Όλ₯Ό λ³΄κ³ μλ‘ μμ±ν©λλ€.
μΆλ ₯μλ λ°κ²¬λ λ¬Έμ κ° λ©μμ§ μ νκ³Ό μ¬κ°λλ‘ λΆλ₯λμ΄ νμλ©λλ€. μΌλ°μ μΈ λ©μμ§ μ νμ λ€μκ³Ό κ°μ΅λλ€.
- C: κ·μΉ(μ: λͺ λͺ κ·μΉ)
- R: 리ν©ν°(μ: κ°μ ν΄μΌ νλ μ½λ)
- W: κ²½κ³ (μ: μ μ¬μ μΈ λ¬Έμ )
- E: μ€λ₯(μ: μ¬κ°ν λ¬Έμ )
- F: μΉλͺ μ μ€λ₯(μ: Pylintκ° κ³μ μ§ννμ§ λͺ»νκ² νλ μ€λ₯)
Pylintλ λν μ½λμ μ λ°μ μΈ νμ§μ λνλ΄λ -10μμ 10κΉμ§μ μ μλ₯Ό μ 곡ν©λλ€. μ μκ° λμμλ‘ μ½λ νμ§μ΄ λ μ’μ΅λλ€. μ΄ μ μλ νμ΄ μ§ν μν©μ μΆμ νκ³ κ°μ μμμ μλ³νλ λ° λμμ΄ λ©λλ€.
νλ‘μ νΈμ λ§κ² Pylint ꡬμ±
Pylintλ λμμ μ¬μ©μ μ§μ νκ³ νλ‘μ νΈμ νΉμ μꡬ μ¬νμ λ§κ² μ‘°μ ν μ μλ κ΄λ²μν κ΅¬μ± μ΅μ
μ μ 곡ν©λλ€. ꡬμ±μ κ΅¬μ± νμΌ(.pylintrc
λλ pylintrc
), λͺ
λ Ήμ€ μΈμ λλ νλ‘μ νΈλ³ μ€μ μ ν΅ν΄ μνν μ μμ΅λλ€. μ΄λ¬ν μ μ°μ±μ λ€μν μ½λ© μ€νμΌκ³Ό νλ‘μ νΈ μꡬ μ¬νμ΄ μ‘΄μ¬ν μ μλ κΈλ‘λ² νμ λ§€μ° μ€μν©λλ€.
κ΅¬μ± νμΌ
Pylintλ₯Ό ꡬμ±νλ κ°μ₯ μΌλ°μ μΈ λ°©λ²μ κ΅¬μ± νμΌμ μ¬μ©νλ κ²μ λλ€. λ€μ λͺ λ Ήμ μ¬μ©νμ¬ κΈ°λ³Έ κ΅¬μ± νμΌμ μμ±ν μ μμ΅λλ€.
pylint --generate-rcfile > .pylintrc
μ΄λ κ² νλ©΄ νμ¬ λλ ν 리μ .pylintrc
νμΌμ΄ μμ±λ©λλ€. κ·Έλ° λ€μ μ΄ νμΌμ μμ νμ¬ λ€μκ³Ό κ°μ λ€μν μ€μ μ μ‘°μ ν μ μμ΅λλ€.
max-line-length
: νμ©λλ μ΅λ μ€ κΈΈμ΄μ λλ€.disable
: λΉνμ±νν λ©μμ§ μ½λ λͺ©λ‘(μ:missing-docstring
).enable
: νμ±νν λ©μμ§ μ½λ λͺ©λ‘(μ:import-error
).good-names
: μ μ ν λ³μ μ΄λ¦μ λν μ κ·μ.bad-names
: μλͺ»λ λ³μ μ΄λ¦μ λν μ κ·μ.ignore
: 무μν νμΌ λλ λλ ν 리.
μ€ κΈΈμ΄λ₯Ό μ‘°μ νκ³ λλ½λ docstringμ λΉνμ±ννκΈ° μν .pylintrc
μμ μ μ:
[MESSAGES CONTROL]
disable=missing-docstring
[FORMAT]
max-line-length=120
λͺ λ Ήμ€ μΈμ
λͺ λ Ήμ€ μΈμλ₯Ό μ¬μ©νμ¬ Pylintλ₯Ό ꡬμ±ν μλ μμ΅λλ€. μ΄λ¬ν μΈμλ κ΅¬μ± νμΌμ μ€μ μ μ¬μ μν©λλ€. λͺ κ°μ§ μ μ©ν μΈμλ λ€μκ³Ό κ°μ΅λλ€.
--rcfile=
: μ¬μ©ν κ΅¬μ± νμΌμ μ§μ ν©λλ€.--disable=
: νΉμ λ©μμ§λ₯Ό λΉνμ±νν©λλ€.--enable=
: νΉμ λ©μμ§λ₯Ό νμ±νν©λλ€.--max-line-length=
: μ΅λ μ€ κΈΈμ΄λ₯Ό μ€μ ν©λλ€.
μ: νμΌμμ pylintλ₯Ό μ€ννκ³ missing-docstring κ²μ¬λ₯Ό λΉνμ±ννλ €λ©΄:
pylint --disable=missing-docstring your_file.py
νλ‘μ νΈλ³ μ€μ
λ ν° νλ‘μ νΈμ κ²½μ° μλ‘ λ€λ₯Έ λλ ν 리 λλ λͺ¨λμμ μλ‘ λ€λ₯Έ ꡬμ±μ μ€μ νλ λ± νλ‘μ νΈλ³ μ€μ μ μ¬μ©νλ κ²μ κ³ λ €νμμμ€. μ΄ μ κ·Ό λ°©μμ λ³΄λ€ μΈλΆνλκ³ λ§μΆ€νλ μ½λ νμ§ νκ°λ₯Ό μ©μ΄νκ² ν©λλ€.
Pylint μ¬μ© λͺ¨λ² μ¬λ‘
Pylintλ₯Ό ν¨κ³Όμ μΌλ‘ νμ©νκ³ μ½λ νμ§μ κ°μ νλ €λ©΄ μ΄λ¬ν λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€.
- μΌκ΄λ μ½λ© μ€νμΌ ν립: μ½λ© μ€νμΌ κ°μ΄λ(μ: PEP 8)λ₯Ό μ ννκ³ μ΄λ₯Ό μ μ©νλλ‘ Pylintλ₯Ό ꡬμ±ν©λλ€. μΌκ΄λ μ½λ μ€νμΌμ μ μΈκ³ κ°λ°μμ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ ν₯μμν΅λλ€.
- Pylintλ₯Ό μ μ νκ² κ΅¬μ±: νλ‘μ νΈμ μ½λ© νμ€ λ° μꡬ μ¬νμ λ§κ² Pylintλ₯Ό μ¬μ©μ μ§μ ν©λλ€. κΈ°λ³Έ μ€μ μ κ·Έλλ‘ μ¬μ©νμ§ λ§μμμ€. νμ μ νΈλμ λ§κ² κ²ν νκ³ μ‘°μ ν©λλ€.
- Pylintλ₯Ό μν¬νλ‘μ ν΅ν©: Pylintλ₯Ό κ°λ° μν¬νλ‘μ ν΅ν©ν©λλ€. μ§μμ ν΅ν©(CI) νμ΄νλΌμΈμ μΌλΆλ‘ Pylintλ₯Ό μ€ννκ±°λ μ¬μ μ»€λ° ν μ μ¬μ©νμ¬ λ³κ²½ μ¬νμ 컀λ°νκΈ° μ μ μ½λλ₯Ό μλμΌλ‘ νμΈν©λλ€. μ΄λ κ² νλ©΄ λ¬Έμ λ₯Ό μ΄κΈ°μ ν¬μ°©νκ³ μ½λλ² μ΄μ€ μ μ²΄λ‘ μ νλλ κ²μ λ°©μ§ν μ μμ΅λλ€.
- 체κ³μ μΌλ‘ λ¬Έμ ν΄κ²°: Pylintκ° λ¬Έμ λ₯Ό λ³΄κ³ νλ©΄ 체κ³μ μΌλ‘ ν΄κ²°ν©λλ€. μ€λ₯ λ° κ²½κ³ μ κ°μ΄ κ°μ₯ μ€μν λ¬Έμ μ μ°μ μμλ₯Ό μ§μ ν©λλ€. μ€νμΌ μλ°μ μμ νκ³ λͺ νμ±μ κ°μ νκΈ° μν΄ μ½λλ₯Ό 리ν©ν°λ§ν©λλ€.
- ꡬμ±μ λ¬Έμν: Pylint κ΅¬μ± νμΌμ λ¬Έμννκ³ μ νμ κ·Όκ±°λ₯Ό μ€λͺ ν©λλ€. μ΄λ κ² νλ©΄ λ€λ₯Έ κ°λ°μκ° νλ‘μ νΈμ μ½λ© νμ€μ μ΄ν΄νκ³ μκ°μ΄ μ§λ¨μ λ°λΌ ꡬμ±μ μ½κ² μ μ§ κ΄λ¦¬ν μ μμ΅λλ€. μ΄λ λ€μνκ³ μ μΈκ³μ μΌλ‘ λΆμ°λ νμ μ²λ¦¬ν λ μ€μν©λλ€.
- μ κΈ°μ μΌλ‘ κ²ν λ° μ λ°μ΄νΈ: νλ‘μ νΈκ° λ°μ νκ³ μ½λ© νμ€μ΄ λ³κ²½λ¨μ λ°λΌ Pylint ꡬμ±μ μ κΈ°μ μΌλ‘ κ²ν νκ³ μ λ°μ΄νΈν©λλ€. νλ‘μ νΈμλ ꡬμ±μ μΆκ°ν΄μΌ νλ νΉμ μꡬ μ¬νμ΄ μμ μ μμ΅λλ€. λν μ΅μ κΈ°λ₯κ³Ό κ°μ μ¬νμ νμ©νκΈ° μν΄ λꡬλ₯Ό μ΅μ λ²μ μΌλ‘ μ λ°μ΄νΈνλ κ²μ΄ μ’μ΅λλ€.
- Pylint ν΅ν© μ½λ νΈμ§κΈ° μ¬μ©: VS Code, PyCharm λ° Sublime Textμ κ°μ λ§μ μ½λ νΈμ§κΈ°μλ Pylintμ λν λ΄μ₯ λλ νλ¬κ·ΈμΈ μ§μμ΄ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ νΈμ§κΈ° λ΄μμ Pylintμ λ³΄κ³ μλ₯Ό μ§μ λ³Ό μ μμΌλ―λ‘ μ½λλ₯Ό μμ±νλ λμ λ¬Έμ λ₯Ό μ½κ² μλ³νκ³ μμ ν μ μμ΅λλ€.
μ: κΈλ‘λ² νμ μν΄ Pylint ꡬμ±
Python νλ‘μ νΈμμ μμ νλ κΈλ‘λ² μννΈμ¨μ΄ κ°λ° νμ μμν΄ λ³΄κ² μ΅λλ€. μ΄ νμ λ€μν κ΅κ°μμ μ¨ κ°λ°μλ‘ κ΅¬μ±λμ΄ μμΌλ©°, κ° κ°λ°μλ κ³ μ ν μ½λ© λ°°κ²½κ³Ό μ νΈλλ₯Ό κ°μ§κ³ μμ΅λλ€. μ½λ νμ§κ³Ό μΌκ΄μ±μ 보μ₯νκΈ° μν΄ νμ Pylintλ₯Ό μ¬μ©νκΈ°λ‘ κ²°μ ν©λλ€. μ΄ νμ μν΄ Pylintλ₯Ό ꡬμ±νλ λ¨κ³λ³ κ°μ΄λλ λ€μκ³Ό κ°μ΅λλ€.
- μ½λ© νμ€ μ μ: νμ PEP 8 μ€νμΌ κ°μ΄λλ₯Ό κΈ°μ€μΌλ‘ μ€μνκΈ°λ‘ λμν©λλ€. λν λ³μμ ν¨μμ λν νΉμ λͺ λͺ κ·μΉμ κ²°μ ν©λλ€.
.pylintrc
νμΌ μμ±: νμ νλ‘μ νΈμ λ£¨νΈ λλ ν 리μ.pylintrc
νμΌμ μμ±ν©λλ€.- μΌλ° μ€μ ꡬμ±:
.pylintrc
νμΌμμ νμ μ΅λ μ€ κΈΈμ΄μ νμ©λ λΉ μ€ μμ κ°μ μΌλ° μ€μ μ ꡬμ±ν©λλ€.max-line-length
λ₯Ό 120μΌλ‘ μ€μ νκ³ μ€ λμ΄ μΌκ΄λλλ‘ ν©λλ€. - λ©μμ§ μ μ΄ μ¬μ©μ μ§μ : νμ νλ‘μ νΈμ λ μ€μν κ²μΌλ‘ κ°μ£Όλλ νΉμ λ©μμ§, μλ₯Ό λ€μ΄ κ°μΈ λ©μλμ λν docstringκ³Ό κ΄λ ¨λ λ©μμ§λ₯Ό λΉνμ±ννμ¬ Pylint λ³΄κ³ μμ λ
Έμ΄μ¦λ₯Ό μ€μ
λλ€.
disable
μ΅μ μ μ¬μ©νμ¬ μμ°μ±μ λ°©ν΄νλ κ΄λ ¨ μλ κ·μΉ λλ λ무 μ격ν κ·μΉμ μ μΈν©λλ€. - λͺ
λͺ
κ·μΉ μ€μ : νμ λ³μμ ν¨μμ λν λͺ
λͺ
κ·μΉμ μ μν©λλ€.
good-names
λ°bad-names
μ΅μ μμ μ κ·μμ μ¬μ©νμ¬ μ΄λ¬ν κ·μΉμ μ μ©ν©λλ€. μλ₯Ό λ€μ΄, λͺ¨λ public ν¨μλsnake_case
λ‘, private λ©μλλ μ ν λ°μ€λ‘ λͺ λͺ νλλ‘ μ§μ νμ¬ μ½λ κ°λ μ±μ λμ΄κ³ λͺ λͺ μΆ©λμ λ°©μ§ν μ μμ΅λλ€. - μΈλΆ λΌμ΄λΈλ¬λ¦¬ 무μ: νμ Pylintκ° νμ¬ λΌμ΄λΈλ¬λ¦¬κ° ν¬ν¨λ νΉμ νμΌ λλ λλ ν 리λ₯Ό 무μνλλ‘ κ΅¬μ±νμ¬ Pylintκ° μ΄λ¬ν λ¬Έμ μ λν λ¬Έμ λ₯Ό μ κΈ°νμ§ μλλ‘ ν©λλ€. μ΄λ₯Ό ν΅ν΄ Pylintκ° νλ‘μ νΈμ μμ€ μ½λμλ§ μ§μ€νλλ‘ ν©λλ€.
- CI/CDμ ν΅ν©: νμ Pylintλ₯Ό CI/CD νμ΄νλΌμΈμ ν΅ν©ν©λλ€. Pylintλ₯Ό λͺ¨λ μ»€λ° λλ ν μμ²μμ μ€ννκ³ Pylintκ° μ¬κ°ν λ¬Έμ (μ: μ€λ₯)λ₯Ό λ°κ²¬νλ©΄ λΉλλ₯Ό μ€ν¨νλλ‘ νμ΄νλΌμΈμ ꡬμ±ν©λλ€. μ΄ νλ‘μΈμ€λ Jenkins, GitLab CI λλ GitHub Actionsμ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ μμ£Ό ꡬνλ©λλ€.
- μ κΈ°μ μΌλ‘ κ²ν λ° μ λ°μ΄νΈ: νμ Pylint ꡬμ±μ λν μ κΈ°μ μΈ κ²ν λ₯Ό μμ½ν©λλ€. μ½λ© νμ€ λλ νλ‘μ νΈ μꡬ μ¬νμ λ³κ²½ μ¬νμ λ°μνκΈ° μν΄ νμμ λ°λΌ ꡬμ±μ λ Όμνκ³ μ‘°μ ν©λλ€. μ΄λ₯Ό ν΅ν΄ νμ Pylintλ₯Ό κ΄λ ¨μ± μκ² μ μ§νκ³ μκ°μ΄ μ§λ¨μ λ°λΌ λͺ©νμ λ§μΆ° μ μ§νλ λ° λμμ΄ λ©λλ€.
μ΄ νμ λ°©μμ κΈλ‘λ² νμ΄ Pylintλ₯Ό ν¨κ³Όμ μΌλ‘ νμ©νμ¬ λ€μν μ§λ¦¬μ μμΉμμ μ½λ νμ§, νμ λ° μ μ§λ³΄μμ±μ μ΄μ§ν μ μλλ‘ ν©λλ€.
κ³ κΈ Pylint κΈ°λ₯ λ° ν΅ν©
κΈ°λ³Έ κ²μ¬λ₯Ό λμ΄ Pylintλ μ½λ νμ§ νκ°λ₯Ό λμ± ν₯μμν¬ μ μλ λ λ§μ κ³ κΈ κΈ°λ₯κ³Ό ν΅ν©μ μ 곡ν©λλ€. μ¬κΈ°μλ λ€μμ΄ ν¬ν¨λ©λλ€.
- νλ¬κ·ΈμΈ: Pylintλ κΈ°λ₯μ νμ₯ν μ μλ νλ¬κ·ΈμΈμ μ§μν©λλ€. νΉμ νλ μμν¬ λλ λΌμ΄λΈλ¬λ¦¬μ λν νλ¬κ·ΈμΈμ μ°Ύκ±°λ μ¬μ©μ μ§μ κ²μ¬λ₯Ό μννκΈ° μν΄ μ§μ μμ±ν μ μμ΅λλ€.
- μ½λ νΈμ§κΈ°μμ ν΅ν©: VS Code, PyCharm λ° Sublime Textμ κ°μ λ§μ μΈκΈ° μλ μ½λ νΈμ§κΈ°λ Pylintμ ν΅ν©μ μ 곡ν©λλ€. μ΄λ¬ν ν΅ν©μ μ½λλ₯Ό μμ±ν λ μ€μκ° νΌλλ°±μ μ 곡νμ¬ λ¬Έμ λ₯Ό κ°μ‘° νμνκ³ κ°μ μ¬νμ μ μν©λλ€. κ°λ°μ μμ°μ±μ ν¬κ² ν₯μμν΅λλ€.
- CI/CD νμ΄νλΌμΈκ³Όμ ν΅ν©: Pylintλ Jenkins, GitLab CI λ° GitHub Actionsμ κ°μ CI/CD νμ΄νλΌμΈκ³Ό μννκ² ν΅ν©λ©λλ€. νμ΄νλΌμΈμ ꡬμ±νμ¬ λͺ¨λ μ»€λ° λλ ν μμ²μμ Pylintλ₯Ό μ€ννκ³ λ¬Έμ κ° λ°κ²¬λλ©΄ λΉλλ₯Ό μλμΌλ‘ μ€ν¨νμ¬ μ½λ νμ§ νμ€μ μ μ©ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μλ° μ¬νμ΄ μλ μ½λκ° μ£Ό λΈλμΉμ ν΅ν©λλ κ²μ λ°©μ§ν μ μμ΅λλ€.
- λ³΄κ³ μ λ° λμ보λ: Pylintλ HTML λ° JSON λ³΄κ³ μλ₯Ό ν¬ν¨ν λ€μν λ³΄κ³ μλ₯Ό μμ±ν μ μμ΅λλ€. μ΄λ¬ν λ³΄κ³ μλ₯Ό μ¬μ©νμ¬ μκ°μ΄ μ§λ¨μ λ°λΌ μ½λ νμ§ μΆμΈλ₯Ό μΆμ νκ³ λ¬Έμ λ₯Ό μκ°νν μ μμ΅λλ€. JSON νμμ μΆλ ₯ λ³΄κ³ μλ λ€λ₯Έ λꡬμμ ν΅ν©μ λ§€μ° μ μ©ν©λλ€.
- μ¬μ©μ μ§μ λ©μμ§ μ ν: μ½λμ λ¬Έμ λ₯Ό λ μ λΆλ₯νκΈ° μν΄ μ¬μ©μ μ§μ λ©μμ§ μ νμ μ μν μ μμ΅λλ€. μλ₯Ό λ€μ΄ μ±λ₯ κ΄λ ¨ λ¬Έμ μ λν μ¬μ©μ μ§μ λ©μμ§ μ νμ μ μν μ μμ΅λλ€.
κΈλ‘λ² μννΈμ¨μ΄ κ°λ° 컨ν μ€νΈμ Pylint
Pylintμ κ°μΉλ κ°λ³ μ½λ νμ§ μμμ ν¨μ¬ λ°μ΄λμ΅λλ€. μ§λ¦¬μ κ²½κ³μ λ€μν λ¬Ένμ λ§₯λ½μμ μμ νλ νμ νΉμ μ΄μ μ μ 곡ν©λλ€.
- μ½λ μΌκ΄μ±: λλ₯κ³Ό ν μ 체μμ Pylintλ λͺ¨λ κ°λ°μκ° λμΌν μ½λ© νμ€μ μ€μνλλ‘ ν©λλ€. μ΄λ¬ν μΌκ΄μ±μ νΉν μλ‘ λ€λ₯Έ μμΉμ κ°λ°μκ° λμΌν μ½λλ² μ΄μ€μ κΈ°μ¬ν λ μ μ§λ³΄μμ λ§€μ° μ€μν©λλ€. μ€ν΄λ₯Ό μ΅μννκ³ νμ μ μ©μ΄νκ² ν©λλ€.
- κ°μνλ μ¨λ³΄λ©: μμΉλ μ΄μ κ²½νμ κ΄κ³μμ΄ μλ‘μ΄ ν ꡬμ±μμ Pylintλ₯Ό ν΅ν΄ νλ‘μ νΈμ μ½λ© νμ€μ λΉ λ₯΄κ² μ΄ν΄ν μ μμ΅λλ€. ꡬμ±μ μΌλ ¨μ μ§μΉ¨ μν μ νμ¬ μ¨λ³΄λ© νλ‘μΈμ€λ₯Ό κ°μννκ³ νμ΅ κ³‘μ μ μ€μ λλ€.
- ν₯μλ νμ : λͺ¨λ κ°λ°μκ° λμΌν λꡬλ₯Ό μ¬μ©νκ³ λμΌν νμ€μ λ°λ₯΄λ κ²½μ° μ½λ κ²ν λ° μ§μ 곡μ κ° λ μ¬μμ§λλ€. μ΄λ κΈλ‘λ² νμ νμμ μΈ νμ μ μ΄κ³ ν¨μ¨μ μΈ μμ νκ²½μ μ‘°μ±ν©λλ€.
- ν₯μλ λ²κ·Έ λ°©μ§: Pylintλ₯Ό ν΅ν μ μ¬μ μ€λ₯ μ‘°κΈ° κ°μ§λ νΉν νμ΄ μλ‘ λ€λ₯Έ μκ°λμ λΆμ°λμ΄ μκ³ λ¬Έμ ν΄κ²°μ μ‘°μ ν΄μΌ νλ κ²½μ° λ²κ·Έ λ°μ κ°λ₯μ±μ μ€μ λλ€.
- μ½λ μμ κΆ μ©μ΄: μ½λ νμ§μ λν 곡μ λ μ΄ν΄λ₯Ό ν립ν¨μΌλ‘μ¨ Pylintλ ν ꡬμ±μ κ°μ 곡μ μ± μκ°κ³Ό μμ κΆμ μ₯λ €ν©λλ€. μ΄λ μ§μ μ΄μ κ³Ό νμ μ μ₯λ €νλ λ³΄λ€ νμ μ μΈ νκ²½μ μ‘°μ±νμ¬ κ³ νμ§ μ½λλ₯Ό μ 곡ν©λλ€.
λ³Έμ§μ μΌλ‘ Pylintλ λ¬Έν λ° μ§λ¦¬μ μμΉ κ°μ μ΄ν΄ 격차λ₯Ό ν΄μνμ¬ μ½λ νμ§μ μν 곡μ μΈμ΄ μν μ ν©λλ€.
μΌλ°μ μΈ Pylint λ¬Έμ λ° ν΄κ²° λ°©λ²
Pylintλ μ μ©ν λꡬμ΄μ§λ§ μλ³νλ μΌλ°μ μΈ λ¬Έμ μ μ΄λ₯Ό ν¨κ³Όμ μΌλ‘ ν΄κ²°νλ λ°©λ²μ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€. λ€μμ λͺ κ°μ§ λΉλ²ν λ©μμ§ λ° λ¬Έμ ν΄κ²° μ κ·Ό λ°©μμ λλ€.
- λλ½λ Docstring(
missing-docstring
):- λ¬Έμ : Pylintλ ν¨μ, ν΄λμ€, λͺ¨λ λ° λ©μλμ λν λλ½λ docstringμ νλκ·Έν©λλ€.
- ν΄κ²° λ°©λ²: κ° μμμ λͺ©μ , μΈμ λ° λ°ν κ°μ μ€λͺ νλ ν¬κ΄μ μΈ docstringμ μμ±ν©λλ€. μΌκ΄λ λ¬Έμλ μ μ§λ³΄μμ λ§€μ° μ€μν©λλ€. Google λλ reStructuredTextμ κ°μ docstring νμμ μ¬μ©νμ¬ λͺ νμ±κ³Ό μΌκ΄μ±μ 보μ₯ν©λλ€.
- μλͺ»λ μ΄λ¦(
invalid-name
):- λ¬Έμ : Pylintλ ꡬμ±λ λͺ λͺ κ·μΉμ λ°λΌ λͺ λͺ μλ°μ μλ³ν©λλ€.
- ν΄κ²° λ°©λ²: λ³μ λ° ν¨μ μ΄λ¦μ΄ νλ‘μ νΈμ λͺ
λͺ
μ€νμΌ(μ: λ³μμ κ²½μ° snake_case, ν΄λμ€μ κ²½μ° PascalCase)μ μ€μνλμ§ νμΈν©λλ€. νΉμ κ·μΉμ μ μ©νλ €λ©΄
.pylintrc
ꡬμ±μ νμΈνκ³ μμ ν©λλ€.
- μ¬μ©νμ§ μλ κ°μ Έμ€κΈ°(
unused-import
):- λ¬Έμ : Pylintλ μ½λμμ μ¬μ©λμ§ μμ κ°μ Έμ€κΈ°μ λν΄ κ²½κ³ ν©λλ€.
- ν΄κ²° λ°©λ²: μ¬μ©νμ§ μλ κ°μ Έμ€κΈ°λ₯Ό μ κ±°ν©λλ€. μ½λλ₯Ό μ΄μμ νκ² λ§λ€κ³ νλ‘μ νΈ ν¬κΈ°λ₯Ό λ릴 μ μμ΅λλ€. κ°λ μ±μ μν΄ import λ¬Έμ ꡬμ±ν μλ μμ΅λλ€.
- λ무 λ§μ λΆκΈ°/λ¬Έ(
too-many-branches
,too-many-statements
):- λ¬Έμ : Pylintλ λ무 볡μ‘νκ±°λ λ¬Έμ΄ λ무 λ§μ ν¨μ λλ λ©μλλ₯Ό μλ³ν©λλ€.
- ν΄κ²° λ°©λ²: μ½λλ₯Ό 리ν©ν°λ§νμ¬ λ³΅μ‘ν ν¨μλ₯Ό λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ λ¨μλ‘ λΆν΄ν©λλ€. μ΄λ κ² νλ©΄ κ°λ μ±μ΄ ν₯μλκ³ μ€λ₯ μνμ΄ μ€μ΄λλλ€. 볡μ‘ν λ Όλ¦¬λ₯Ό λ¨μννκΈ° μν΄ λμμΈ ν¨ν΄μ μ¬μ©νλ κ²μ κ³ λ €νμμμ€.
- μ€μ΄ λ무 κΉ(
line-too-long
):- λ¬Έμ : Pylintλ ꡬμ±μ μ§μ λ μ΅λ μ€ κΈΈμ΄λ₯Ό μ΄κ³Όνλ μ€μ νλκ·Έν©λλ€.
- ν΄κ²° λ°©λ²: κΈ΄ μ€μ λ μ§§μ μ€λ‘ λλλλ€. κ΄νΈ λλ μ€ μ°μ λ¬Έμ(λ°±μ¬λμ)λ₯Ό μ¬μ©νμ¬ κ°λ μ±μ ν₯μμν΅λλ€. μ€μ κ°κ²°νκ³ μ§μ€μ μΌλ‘ μ μ§νμμμ€.
- μλͺ»λ κ°μ Έμ€κΈ° μμΉ(
wrong-import-position
):- λ¬Έμ : Pylintλ νμΌ λ§¨ μμ λ°°μΉλμ§ μμ import λ¬Έμ λ³΄κ³ ν©λλ€.
- ν΄κ²° λ°©λ²: PEP 8 κΆμ₯ μ¬νμ λ°λΌ import λ¬Έμ΄ λͺ¨λ docstring λ€, λ€λ₯Έ μ½λ μμ νμΌ μμ λΆλΆμ μλμ§ νμΈν©λλ€.
- λλ½λ λͺ¨λ Docstring(
missing-module-docstring
):- λ¬Έμ : Pylintλ λͺ¨λ μμ λΆλΆμ docstringμ΄ μμμ λ³΄κ³ ν©λλ€.
- ν΄κ²° λ°©λ²: Python λͺ¨λ μμ λΆλΆμ docstringμ μΆκ°νμ¬ λͺ¨λμ΄ μννλ μμ κ³Ό ν΄λΉ λͺ©μ μ μ€λͺ ν©λλ€. μ΄λ μ μ§λ³΄μμ λ§€μ° μ€μνλ©° ν₯ν κ°λ°μλ₯Ό μν 컨ν μ€νΈλ₯Ό μ 곡ν©λλ€.
- λͺ¨λ μμ€ νΉμ±μ μμλ₯Ό μ¬μ©νλ κ²μ κ³ λ €νμμμ€(
missing-final-newline
):- λ¬Έμ : Pylintλ νμΌ λμ μ΅μ’ μ€ λ°κΏ λ¬Έμκ° μμμ λ³΄κ³ ν©λλ€.
- ν΄κ²° λ°©λ²: PEP 8 μ§μΉ¨μ λ°λΌ κ°λ μ±μ μν΄ Python νμΌ λμ λΉ μ€μ μΆκ°ν©λλ€.
μ΄λ¬ν μΌλ°μ μΈ λ¬Έμ μ ν΄λΉ μ루μ μ μ΄ν΄ν¨μΌλ‘μ¨ κ°λ°μλ Pylintμ λ³΄κ³ μλ₯Ό ν¨κ³Όμ μΌλ‘ μ²λ¦¬νκ³ Python μ½λμ μ λ°μ μΈ νμ§μ κ°μ ν μ μμ΅λλ€. λͺ©νλ μ½κΈ° μ½κ³ , μ μ§λ³΄μ κ°λ₯νλ©°, λ²κ·Έκ° μλ μ½λλ₯Ό λ§λλ κ²μμ κΈ°μ΅νμμμ€. μ΄ μΉμ μ μ§μΉ¨κ³Ό ν¨κ» Pylintμ ν΅μ°°λ ₯μ μ΄λ¬ν λͺ©νλ₯Ό λ¬μ±νλ λ° λμμ΄ λ©λλ€.
κ²°λ‘ : κΈλ‘λ²νκ² μΌκ΄λ μ½λλ² μ΄μ€λ₯Ό μν΄ Pylint μμ©
κ²°λ‘ μ μΌλ‘, Pylintλ Pythonμ μ¬μ©νλ λͺ¨λ κΈλ‘λ² μννΈμ¨μ΄ κ°λ° νμ νμμ μΈ λꡬμ λλ€. μ½λ© νμ€μ μ μ©νκ³ , μ μ¬μ μ€λ₯λ₯Ό κ°μ§νλ©°, μ½λ μ μ§λ³΄μμ±μ μ΄μ§νλ κΈ°λ₯μ λ§€μ° μ€μν©λλ€. κ°λ° μν¬νλ‘μ Pylintλ₯Ό ν΅ν©νκ³ μ μ νκ² κ΅¬μ±ν¨μΌλ‘μ¨ λ€μν νκ³Ό μ§λ¦¬μ μμΉμμ μ½λ νμ§μ ν¬κ² κ°μ νκ³ , λ²κ·Έλ₯Ό μ€μ΄λ©°, νμ μ ν₯μμν¬ μ μμ΅λλ€.
ν΅μ¬μ Pylintκ° μ½λ νμ§μ λν 곡μ λ μ΄ν΄λ₯Ό μ‘μ±νλ€λ κ²μ λλ€. λΆμ°λ νμ μΈκ³μμ μ΄ κ³΅μ λ μ΄ν΄λ κ·Έ μ΄λ λλ³΄λ€ μ€μν©λλ€. Pylintλ₯Ό μ§μμ μΌλ‘ μ¬μ©νκ³ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄ μκ°μ ν μ€νΈμ κΈλ‘λ² μννΈμ¨μ΄ κ°λ°μ κ³Όμ λ₯Ό 견λ μ μλ λ³΄λ€ κ°λ ₯νκ³ , μ λ’°ν μ μμΌλ©°, μ μ§λ³΄μ κ°λ₯ν μ½λλ² μ΄μ€λ₯Ό ꡬμΆν μ μμ΅λλ€.
κ°λ° μ λ΅μ μ€μν κ΅¬μ± μμλ‘ Pylintλ₯Ό μμ©νμμμ€. μ΄μ μ κ°λ³ μ½λ κ°μ μ λμ΄ νμ₯λ©λλ€. μ΄λ₯Ό ν΅ν΄ κΈλ‘λ² νμ λ³΄λ€ ν¨κ³Όμ μΌλ‘ μμ νκ³ , μ§μμ λ³΄λ€ μ½κ² 곡μ νλ©°, κΆκ·Ήμ μΌλ‘ λ λμ νμ§μ μννΈμ¨μ΄λ₯Ό μ 곡ν μ μμ΅λλ€.