C'est quand on m'a demandé de me pencher sur l'environnement d'un certain site de développement. La ** procédure de construction de l'environnement est donnée verbalement **, et Anaconda est installé sur Windows et des packages supplémentaires sont installés avec pip. Bien sûr, ** aucune version n'est spécifiée **, donc la dernière version à ce moment-là sera incluse, donc la version mineure différera en fonction du moment d'entrée. Dans une grande équipe qui chevauche des entreprises, il est possible que la société A fonctionne, mais pas la société B. ** Puisque l'introduction de Lint et du formateur est facultative **, le journal de validation de git ** les parties ajoutées et modifiées et le diff de la partie formatée coexistent **, et la révision des sources prend du temps.
Souhaitez-vous unifier l'environnement d'exploitation Python pour tous les membres de l'équipe de développement? Souhaitez-vous créer une source propre et facile à maintenir selon les règles du code?
Commençons la réforme du style de travail des ingénieurs avec ** Poésie **!
Nous viserons ce qui précède. En passant, voici les principaux problèmes du site de développement mentionnés dans la vue d'ensemble.
problème | Qu'est-ce qui ne va pas | Sera-t-il résolu avec la poésie? |
---|---|---|
Procédure de construction de l'environnement oral(Ou txt) | Provoque une erreur humaine telle qu'une omission | Reproductibilité car le programme d'installation de l'environnement est terminé ◎ |
Installation de Pip sur l'environnement Anaconda | Dans le pire des cas, il sera nécessaire de réinstaller l'environnement Anaconda. | Ne vous inquiétez pas car vous n'utilisez pas Anaconda |
Aucune version spécifiée | Cela ne fonctionne pas selon la personne ... | La version peut être unifiée avec une seule commande |
Les peluches et le formateur sont facultatifs | Le code difficile à lire est difficile à maintenir | Il peut être obligatoire d'installer l'outil. L'exécution automatique doit être combinée avec vscode et git. |
Nous installerons la poésie sous l'environnement python. Il s'agit d'une installation unique avec la commande suivante. Il n'est pas nécessaire d'apprendre des opérations comme Docker.
$pip install poetry
Une fois la poésie installée, nous créerons un modèle de projet.
$ poetry new xxx
La partie correspondant à xxx est le nom du projet. C'est la partie de * pip install xxx * qui correspond à xxx. Vous aurez un répertoire source / test et un fichier Readme, pyproject.toml. Après cela, poussez vers le référentiel git et la configuration initiale est terminée.
Quand vous l'exécutez, ça ressemble à ça |
---|
Modifiez le fichier ** pyproject.toml ** pour configurer les bibliothèques dépendantes requises par votre projet. pyproject.tomlはパッケージビルドに必要なデータを定義するファイルのフォーマットで、setup.py/cfgを置き換えてsetuptoolsではないビルドツールでもビルドが可能となることを目的として作られたものです。
#Ajouter une bibliothèque dépendante
$ poetry add xxx
#Ajout d'une bibliothèque de développement
$ poetry add -D xxx
Il peut être exécuté de la même manière que pip install. Si vous souhaitez spécifier la version, utilisez l'opérateur ==.
$ root@16460604cb93:~/poetry_template# poetry add tensorflow==2.3.0
Creating virtualenv poetry-template-oDQfK0qA-py3.8 in /root/.cache/pypoetry/virtualenvs
Updating dependencies
Resolving dependencies... (48.4s)
Writing lock file
Package operations: 41 installs, 0 updates, 0 removals
$ root@16460604cb93:~/poetry_template# poetry add -D mypy black isort
Using version ^0.790 for mypy
Using version ^20.8b1 for black
Using version ^5.6.4 for isort
Au fur et à mesure que vous exécutez la commande add, elle sera ajoutée au fichier pyproject.toml. Vous pouvez également modifier directement pyproject.toml.
[tool.poetry]
name = "poetry_template"
version = "0.1.0"
description = ""
authors = ["Your Name <[email protected]>"]
[tool.poetry.dependencies]
python = "^3.8"
tensorflow = "2.3.0"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
mypy = "^0.790"
black = "^20.8b1"
isort = "^5.6.4"
flake8 = "^3.8.4"
radon = "^4.3.2"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Nous allons créer un environnement virtuel (venv) dans lequel l'environnement selon les conditions décrites dans le fichier pyproject.toml est installé.
Par défaut, venv est créé dans le répertoire personnel, mais ce serait bien s'il pouvait être créé directement sous le projet, comme lors de son utilisation avec vscode, alors changez le paramètre.
$ poetry config virtualenvs.in-project true
$ poetry config --list
L'installation est également une commande unique. Vous aurez un répertoire .venv et un fichier poetry.lock.
$ poetry install
Quand vous l'exécutez, ça ressemble à ça |
---|
Le fichier poetry.lock est un fichier qui garantit des dépendances complètes. Même si vous n'avez pas spécifié de versions explicites dans le fichier pyproject.toml, le fichier de verrouillage enregistre les informations de version des dépendances qui ont été installées avec succès dans le passé afin que n'importe qui puisse les reproduire à tout moment. En d'autres termes, si vous ** distribuez ce fichier aux membres de l'équipe ** et faites installer ** poetry **, vous disposerez toujours d'un environnement unique.
Nous accéderons à l'environnement virtuel créé en dernier. Vous pouvez accéder aux commandes dans l'environnement virtuel avec la commande poetry run.
#Attacher à python
$ poetry run python -V
Python 3.8.5
#Essai
$ poetry run pytest
======================================================= test session starts =======================================================
platform linux -- Python 3.8.5, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
rootdir: /root/poetry_template
collected 1 item
tests/test_poetry_template.py . [100%]
======================================================== 1 passed in 0.01s ========================================================
Cela fait longtemps, mais c'est tout pour la poésie. J'espère que vous comprenez que vous pouvez coder l'environnement avec seulement quelques commandes, le gérer avec Git et que tous les membres du projet peuvent développer dans le même environnement.
Nous avons créé un modèle de projet que vous pouvez réellement utiliser, veuillez donc l'utiliser. https://github.com/TomokiHirose/poetry_template
Je crée un modèle de projet avec les fonctions suivantes. Réécrivez le modèle et utilisez la commande de mise à jour de poésie pour réécrire l'environnement en fonction de l'utilisateur.
commander | Contenu |
---|---|
poetry run pytest | ./Exécutez les tests en utilisant le fichier sous tests |
poetry run format | black(Formateur puissant)Et isort(Aligner l'ordre d'importation)Courses |
poetry run lint | flake8(linter)Et mypy(Vérification du type statique)Courses |
poetry run metrics | Effectuer une analyse statique de l'indice de complexité circulaire, de l'indice de disponibilité de la maintenance, du LOC, etc. |
poetry run apidoc | Générer de la documentation sur l'API avec sphinx |
poetry run testdoc | Générer la documentation de test avec sphinx[^1] |
poetry build | ./lime de roue sous dist(installateur python)Générer |
J'ai oublié de l'installer! Même dans ce cas, au lieu de "Veuillez installer xx", poussez simplement le correctif sur git et tous les membres appuient sur la commande de mise à jour, et tout le monde sera immédiatement dans le même environnement! Ne pensez-vous pas que c'est très moderne?
De plus, si vous créez un lien avec vscode pour exécuter automatiquement black et flake8 sous .venv au moment de l'enregistrement, ou le liez au hook de validation de git et exécutez black avant de pousser, le format sera forcé. peut faire. Je ne pense pas que ce soit génial de suivre PEP8 [^ 2], mais si vous forcez ** quelqu'un à écrire le même code **, c'est similaire même si les avancés et les nouveaux venus sont dans le même projet. Il est recommandé car il sera plus facile à maintenir car le code sera complété ainsi.
[^ 1]: Un document qui enregistre les éléments à confirmer dans le test et le testeur en charge. [^ 2]: PEP8 est un standard de codage Python. Il n'est pas toujours nécessaire de le suivre, mais il y a une différence de facilité d'entretien selon qu'il existe une norme ou non.
Recommended Posts