Analyse statique des programmes Python

introduction

Nous avons résumé l'utilisation simple des outils utiles suivants disponibles en Python.

Qu'est-ce que pipenv

Il facilite la gestion des packages et la création d'environnements virtuels lors du développement avec Python. Cela ressemble à npm dans Node.js.

Préparation

  1. Installation de pipenv

    pip install pipenv
    
  2. Créez un fichier pip

    pipenv --python 3.8 # 3.La partie 8 peut être modifiée pour la version de Python que vous souhaitez utiliser
    

Un Pipfile est créé.

  1. Installation du package de développement Installez un outil d'analyse statique qui n'est utilisé que pendant le développement.

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

Chaque paquet est ajouté aux [dev-packages] de Pipfile, et Pipfile.lock est créé / mis à jour.

  1. Installation de packages de production Installez le package utilisé pour la production.

    pipenv install requests --pre
    

Chaque package est ajouté aux [packages] de Pipfile, et Pipfile.lock est créé / mis à jour.

Environnement

  1. Créer un environnement virtuel Construisez sur la base des informations dans Pipfile.lock.

  2. Pour l'environnement de développement

    ```bash
    pipenv sync --dev
    ```
    
  3. Pour l'environnement de production

    ```bash
    pipenv sync
    ```
    
  4. Mettez à jour Pipfile.lock (OK si nécessaire)

    pipenv install
    
  5. Entrez dans l'environnement virtuel

    pipenv shell
    
  6. Vérifiez le package d'installation

    pip list
    
Résultats de l'environnement de développement (cliquez ici)
```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>
Résultats de production (cliquez ici)
```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>
  • Vous pouvez voir que le package de développement et ses packages dépendants ne sont pas installés dans l'environnement de production.
  1. Sortez de l'environnement virtuel

    exit
    
  2. Supprimez l'environnement virtuel

    pipenv --rm
    

Qu'est-ce que le noir

black est un formateur de code Python qui modifie automatiquement l'écriture des programmes. Il est également conforme à la convention de codage standard Python PEP8.

Configuration

  1. Réglage noir Vous pouvez définir les paramètres dans pyproject.toml. Dans ce qui suit, la longueur d'une ligne est limitée à 120 lignes et les dossiers qui ne sont pas formatés sont spécifiés. Si vous souhaitez définir plus de paramètres, vous pouvez le découvrir en cochant.

    [tool.black]
    line-length=120
    exclude = '''
    /(
        .eggs
    | .git
    | .hg
    | .pytest_cache
    | .mypy_cache
    | .tox
    | .venv
    | build
    | dist
    )/
    '''
    
  2. Paramètres de script Pipenv Ajoutez des scripts à Pipfile.

    [scripts]
    black = "black ."  # --Si vous ajoutez une vérification, elle ne sera vérifiée que sans mise en forme.
    

Courir

pipenv run black

Le code python sera formaté automatiquement

Qu'est-ce que flake8

flake8 est un wrapper pour l'outil de vérification de code ci-dessous.

--PyFlakes (pyflakes: vérification des erreurs de code) --pycodestyle (vérifier s'il est conforme à pycodestyle: PEP8)

  • Script McCabe de Ned Batchelder (mccabe: vérifier la complexité cyclique)
  • Flake8 ne peut être vérifié et ne peut pas être formaté.

Configuration

  1. paramètres flake8 Vous pouvez définir les paramètres dans setup.cfg. Dans ce qui suit, la longueur d'une ligne est limitée à 120 lignes et les dossiers qui ne sont pas vérifiés sont spécifiés. De plus, E203, W503, W504 sont ignorés en raison du noir. Si vous souhaitez définir plus de paramètres, vous pouvez le découvrir en cochant.

    [flake8]
    exclude = .git, .tox, .venv, .eggs, build, dist, docs, tests
    max-line-length = 120
    ignore = E203,W503,W504
    
  2. Paramètres de script Pipenv Ajoutez des scripts à Pipfile.

    [scripts]
    flake8 = "flake8 ."
    

Courir

pipenv run flake8

Le code python sera vérifié.

Qu'est-ce que isort

isort trie les importations par ordre alphabétique et les divise automatiquement en sections.

Configuration

  1. paramètres isort Vous pouvez définir les paramètres dans setup.cfg. Dans ce qui suit, la longueur d'une ligne est limitée à 120 lignes et les dossiers qui ne sont pas vérifiés sont spécifiés. Si vous souhaitez définir plus de paramètres, vous pouvez le découvrir en cochant.

    [isort]
    line_length = 120
    skip = .git, .tox, .venv, .eggs, build, dist, docs
    include_trailing_comma = true
    multi_line_output = 3
    '''
    
  2. Paramètres de script Pipenv Ajoutez des scripts à Pipfile.

    [scripts]
    isort = "isort . --atomic" # --Si vous supprimez atomic, il ne sera vérifié que sans mise en forme.
    

Courir

pipenv run isort

Le code python sera formaté automatiquement

Qu'est-ce que mypy

mypy vérifiera si vous pouvez écrire des indices de type conformes à PEP484.

Configuration

  1. Paramètres Mypy Vous pouvez définir les paramètres dans setup.cfg. Ce qui suit ignore l'absence de fichier de définition de type de module (stub) et force les annotations de type. Si vous souhaitez définir plus de paramètres, vous pouvez le découvrir en cochant.

    [mypy]
    ignore_missing_imports = True
    disallow_untyped_defs = True
    
  2. Paramètres de script Pipenv Ajoutez des scripts à Pipfile.

    [scripts]
    mypy = "mypy ."
    

Courir

pipenv run mypy

Le code python sera vérifié.

Sommaire

Avec ces outils, vous serez plus productif dans le développement avec Python. Si vous gérez votre code sur GitHub, définissez ce qui suit dans GitHub Actions et il effectuera automatiquement une analyse statique lorsque vous poussez. Si vous obtenez une erreur, corrigez-la et appuyez à nouveau.

.github / workflows / ci.yml (cliquez ici)

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