ทำให้แพ็กเกจดูเป็นระเบียบ

การพัฒนา Python Packages

James Fulton

Climate informatics researcher

แนะนำ flake8

  • มาตรฐานสไตล์ Python อธิบายไว้ใน PEP8
  • Style guide กำหนดรูปแบบการจัดวางโค้ด
  • pytest ใช้สำหรับหาบั๊ก
  • flake8 ใช้สำหรับตรวจสอบข้อผิดพลาดด้านสไตล์
การพัฒนา Python Packages

การรัน flake8

Static code checker — อ่านโค้ดโดยไม่รันจริง

flake8 features.py
features.py:2:1: F401 'math' imported but unused
..
<filename>:<line number>:<charcter number>:<error code> <desciption>
การพัฒนา Python Packages

ใช้ผลลัพธ์เพื่อปรับปรุงคุณภาพโค้ด

 1. import numpy as np
 2. import math
 3.
 4. def mean(x):
 5.    """Calculate the mean"""
 6.    return np.mean(x)
 7. def std(x):
 8.     """Calculate the standard deviation"""
 9.     mean_x = mean(x)
10.     std = mean((x-mean(x))**2)
11.     return std
12. 
flake8 features.py
2:1: F401 'math' imported but unused

4:1: E302 expected 2 blank lines, found 1
7:1: E302 expected 2 blank lines, found 0
5:4: E111 indentation is not a multiple of four 6:4: E111 indentation is not a multiple of four
9:5: F841 local variable 'mean_x' is assigned to but never used
การพัฒนา Python Packages

ใช้ผลลัพธ์เพื่อปรับปรุงคุณภาพโค้ด

 1. import numpy as np
 2.
 3.
 4. def mean(x):
 5.     """Calculate the mean"""
 6.     return np.mean(x)
 7. 
 8. 
 9. def std(x):
10.     """Calculate the standard deviation"""
11.     mean_x = mean(x)
12.     std = mean((x - mean_x)**2)
13.     return std
14. 
flake8 features.py


การพัฒนา Python Packages

ละเมิดกฎอย่างตั้งใจ

quadratic.py

4. ...
5. quadratic_1 = 6 * x**2 + 2 * x + 4;
6. quadratic_2 = 12 * x**2 + 2 * x + 8
7. ...
การพัฒนา Python Packages

ละเมิดกฎอย่างตั้งใจ

quadratic.py

4. ...
5. quadratic_1 =  6 * x**2 + 2 * x + 4;
6. quadratic_2 = 12 * x**2 + 2 * x + 8
7. ...
flake8 quadratic.py
quadratic.py:5:14: E222 multiple spaces after operator
quadratic.py:5:35: E703 statement ends with a semicolon
การพัฒนา Python Packages

ละเมิดกฎอย่างตั้งใจ

quadratic.py

4. ...
5. quadratic_1 =  6 * x**2 + 2 * x + 4; # noqa
6. quadratic_2 = 12 * x**2 + 2 * x + 8
7. ...
flake8 quadratic.py

การพัฒนา Python Packages

ละเมิดกฎอย่างตั้งใจ

quadratic.py

4. ...
5. quadratic_1 =  6 * x**2 + 2 * x + 4; # noqa: E222
6. quadratic_2 = 12 * x**2 + 2 * x + 8
7. ...
flake8 quadratic.py
quadratic.py:5:35: E703 statement ends with a semicolon
การพัฒนา Python Packages

การตั้งค่า flake8

ละเว้นข้อผิดพลาดด้านสไตล์โดยไม่ใช้คอมเมนต์

flake8 --ignore E222 quadratic.py
quadratic.py:5:35: E703 statement ends with a semicolon
flake8 --select F401,F841 features.py
2:1: F401 'math' imported but unused
9:5: F841 local variable 'mean_x' is assigned 
     to but never used
การพัฒนา Python Packages

กำหนดการตั้งค่าแพ็กเกจด้วย setup.cfg

สร้าง setup.cfg เพื่อเก็บการตั้งค่า

โครงสร้างไฟล์ของแพ็กเกจ

.
|-- example_package
|   |-- __init__.py
|   `-- example_package.py
|-- tests
|   |-- __init__.py
|   `-- test_example_package.py
|-- README.rst
|-- LICENSE
|-- MANIFEST.in
`-- setup.py
การพัฒนา Python Packages

กำหนดการตั้งค่าแพ็กเกจด้วย setup.cfg

สร้าง setup.cfg เพื่อเก็บการตั้งค่า

[flake8]


ignore = E302
exclude = setup.py
per-file-ignores = example_package/example_package.py: E222

โครงสร้างไฟล์ของแพ็กเกจ

.
|-- example_package
|   |-- __init__.py
|   `-- example_package.py
|-- tests
|   |-- __init__.py
|   `-- test_example_package.py
|-- README.rst
|-- LICENSE
|-- MANIFEST.in
|-- setup.py
`-- setup.cfg
การพัฒนา Python Packages

ทั้งแพ็กเกจ

$ flake8

โครงสร้างไฟล์ของแพ็กเกจ

.
|-- example_package
|   |-- __init__.py
|   `-- example_package.py
|-- tests
|   |-- __init__.py
|   `-- test_example_package.py
|-- README.rst
|-- LICENSE
|-- MANIFEST.in
|-- setup.py
`-- setup.cfg
การพัฒนา Python Packages

ใช้การกรองให้น้อยที่สุดเท่าที่จำเป็น

กรองน้อยที่สุด

  1. # noqa : <code>
  2. # noqa
  3. setup.pyper-file-ignores
  4. setup.cfgexclude, ignore

กรองมากที่สุด

การพัฒนา Python Packages

มาฝึกกันเถอะ!

การพัฒนา Python Packages

Preparing Video For Download...