Statische Analyse von Python-Programmen

Einführung

Wir haben die einfache Verwendung der folgenden nützlichen Tools in Python zusammengefasst.

Was ist pipenv

Es erleichtert die Verwaltung von Paketen und die Erstellung virtueller Umgebungen bei der Entwicklung mit Python. Es fühlt sich an wie npm in Node.js.

Vorbereitung

  1. Installation von pipenv

    pip install pipenv
    
  2. Erstellen Sie eine Pipfile

    pipenv --python 3.8 # 3.Teil 8 kann in die Version von Python geändert werden, die Sie verwenden möchten
    

Ein Pipfile wird erstellt.

  1. Installation des Entwicklungspakets Installieren Sie ein statisches Analysetool, das nur während der Entwicklung verwendet wird.

    pipenv install --dev black --pre
    pipenv install --dev flake8 --pre
    pipenv install --dev isort --pre
    pipenv install --dev mypy --pre
    

Jedes Paket wird zu [dev-packages] von Pipfile hinzugefügt und Pipfile.lock wird erstellt / aktualisiert.

  1. Installation von Produktionspaketen Installieren Sie das für die Produktion verwendete Paket.

    pipenv install requests --pre
    

Jedes Paket wird zu [Paketen] von Pipfile hinzugefügt und Pipfile.lock wird erstellt / aktualisiert.

Umgebung

  1. Erstellen einer virtuellen Umgebung Build basierend auf den Informationen in Pipfile.lock.

  2. Für die Entwicklungsumgebung

    ```bash
    pipenv sync --dev
    ```
    
  3. Für die Produktionsumgebung

    ```bash
    pipenv sync
    ```
    
  4. Aktualisieren Sie Pipfile.lock (OK, wenn nötig)

    pipenv install
    
  5. Betreten Sie die virtuelle Umgebung

    pipenv shell
    
  6. Überprüfen Sie das Installationspaket

    pip list
    
Ergebnisse der Entwicklungsumgebung (hier klicken)
```bash
Package           Version
----------------- ---------
appdirs           1.4.4
black             20.8b1
certifi           2020.6.20
chardet           3.0.4
click             7.1.2
flake8            3.8.3
idna              2.10
isort             5.5.3
mccabe            0.6.1
mypy              0.782
mypy-extensions   0.4.3
pathspec          0.8.0
pip               20.1.1
pycodestyle       2.6.0
pyflakes          2.2.0
regex             2020.9.27
requests          2.24.0
setuptools        49.6.0
toml              0.10.1
typed-ast         1.4.1
typing-extensions 3.7.4.3
urllib3           1.25.10
wheel             0.35.1
```

</div></details>
Produktionsergebnisse (hier klicken)
```bash
Package    Version
---------- ---------
certifi    2020.6.20
chardet    3.0.4
idna       2.10
pip        20.1.1
requests   2.24.0
setuptools 49.6.0
urllib3    1.25.10
wheel      0.35.1
```

</div></details>
  • Sie können sehen, dass das Entwicklungspaket und seine abhängigen Pakete nicht in der Produktionsumgebung installiert sind.
  1. Verlassen Sie die virtuelle Umgebung

    exit
    
  2. Löschen Sie die virtuelle Umgebung

    pipenv --rm
    

Was ist schwarz

black ist ein Python-Code-Formatierer, der das Schreiben von Programmen automatisch ändert. Es entspricht auch der Python-Standardcodierungskonvention PEP8.

Aufbau

  1. Schwarze Einstellung Sie können die Einstellungen in pyproject.toml definieren. Im Folgenden wird die Länge einer Zeile auf 120 Zeilen begrenzt und die nicht formatierten Ordner angegeben. Wenn Sie weitere Einstellungen vornehmen möchten, können Sie dies durch Überprüfen überprüfen.

    [tool.black]
    line-length=120
    exclude = '''
    /(
        .eggs
    | .git
    | .hg
    | .pytest_cache
    | .mypy_cache
    | .tox
    | .venv
    | build
    | dist
    )/
    '''
    
  2. Pipenv-Skripteinstellungen Fügen Sie Skripte zu "Pipfile" hinzu.

    [scripts]
    black = "black ."  # --Wenn Sie check hinzufügen, wird es nur ohne Formatierung geprüft.
    

Lauf

pipenv run black

Der Python-Code wird automatisch formatiert

Was ist Flake8?

flake8 ist ein Wrapper für das folgende Code-Check-Tool.

--PyFlakes (Pyflakes: Codefehlerprüfung) --pycodestyle (prüfen Sie, ob es pycodestyle entspricht: PEP8)

  • McCabe-Skript von Ned Batchelder (mccabe: Auf zyklische Komplexität prüfen)
  • Flake8 kann nur überprüft und nicht formatiert werden.

Aufbau

  1. flake8 einstellungen Sie können die Einstellungen in setup.cfg definieren. Im Folgenden wird die Länge einer Zeile auf 120 Zeilen begrenzt und die nicht überprüften Ordner angegeben. Auch E203, W503, W504 werden unter Berücksichtigung von Schwarz ignoriert. Wenn Sie weitere Einstellungen vornehmen möchten, können Sie dies durch Überprüfen überprüfen.

    [flake8]
    exclude = .git, .tox, .venv, .eggs, build, dist, docs, tests
    max-line-length = 120
    ignore = E203,W503,W504
    
  2. Pipenv-Skripteinstellungen Fügen Sie Skripte zu "Pipfile" hinzu.

    [scripts]
    flake8 = "flake8 ."
    

Lauf

pipenv run flake8

Der Python-Code wird überprüft.

Was ist isort

isort sortiert die Importe alphabetisch und unterteilt sie automatisch in Abschnitte.

Aufbau

  1. isort Einstellungen Sie können die Einstellungen in setup.cfg definieren. Im Folgenden wird die Länge einer Zeile auf 120 Zeilen begrenzt und die nicht überprüften Ordner angegeben. Wenn Sie weitere Einstellungen vornehmen möchten, können Sie dies durch Überprüfen überprüfen.

    [isort]
    line_length = 120
    skip = .git, .tox, .venv, .eggs, build, dist, docs
    include_trailing_comma = true
    multi_line_output = 3
    '''
    
  2. Pipenv-Skripteinstellungen Fügen Sie Skripte zu "Pipfile" hinzu.

    [scripts]
    isort = "isort . --atomic" # --Wenn Sie Atomic entfernen, wird dies nur ohne Formatierung überprüft.
    

Lauf

pipenv run isort

Der Python-Code wird automatisch formatiert

Was ist mypy?

mypy prüft, ob Sie Typhinweise schreiben können, die [PEP484] entsprechen (https://www.python.org/dev/peps/pep-0484/).

Aufbau

  1. Mypy-Einstellungen Sie können die Einstellungen in setup.cfg definieren. Im Folgenden wird das Fehlen einer Modultypdefinitionsdatei (Stub) ignoriert und Typanmerkungen erzwungen. Wenn Sie weitere Einstellungen vornehmen möchten, können Sie dies durch Überprüfen überprüfen.

    [mypy]
    ignore_missing_imports = True
    disallow_untyped_defs = True
    
  2. Pipenv-Skripteinstellungen Fügen Sie Skripte zu "Pipfile" hinzu.

    [scripts]
    mypy = "mypy ."
    

Lauf

pipenv run mypy

Der Python-Code wird überprüft.

Zusammenfassung

Mit diesen Tools können Sie produktiver mit Python entwickeln. Wenn Sie Ihren Code auf GitHub verwalten, legen Sie in GitHub-Aktionen Folgendes fest. Beim Push wird automatisch eine statische Analyse durchgeführt. Wenn Sie einen Fehler erhalten, beheben Sie ihn und drücken Sie erneut.

.github / workflows / ci.yml (hier klicken)

yml:.github/workflows/ci.yml


name: Source Code Check
on: [push]
jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - name: Setup Python
        uses: actions/setup-python@v1
        with:
          python-version: '3.8'
      - name: Install Python Dependencies
        run: |
            python -m pip install --upgrade pip
            pip install pipenv
            pipenv sync --dev
      - name: Check with black
        run: pipenv run black
      - name: Check with flake8
        run: pipenv run flake8
      - name: Check with isort
        run: pipenv run isort
      - name: Check with mypy
        run: pipenv run mypy

Recommended Posts