Nous résumerons l'utilisation de base de l'outil de gestion de projet Python Poetry à travers une série d'étapes simples de création d'application CLI.
L'environnement d'exécution est supposé être MacOS / Ubuntu.
La version de la poésie est 1.0.5
Créez une commande greet
qui fonctionne comme suit.
La poésie est utilisée pour gérer les packages Python requis pour les commandes et pour installer et utiliser des commandes dans un environnement virtuel local.
$ greet hello John
Hello John!
$ greet goodnight John
Goodnight John...
$ greet goodnight --sleeping John
zzz
Installer des packages directement dans votre environnement local à l'aide de Poetry est un peu délicat. J'ai utilisé l'outil CLI comme sujet parce que c'était facile, mais je ne savais pas comment l'installer avec Poetry pour un usage quotidien. Pour plus de détails, reportez-vous à la rubrique "Paramètres de poésie" à la fin de cet article.
Poetry
Un outil de gestion des dépendances et des versions des packages utilisés dans les projets Python (Ici, la structure de répertoires et les fichiers nécessaires pour créer un package sont appelés collectivement un projet).
Étant donné que les informations du package sont gérées sur la base du fichier pyproject.toml, l'environnement requis pour le projet peut être facilement reproduit en partageant le fichier pyproject.toml. Poetry crée également automatiquement un modèle pour le fichier pyproject.toml.
Officiellement
Poetry is a tool for dependency management and packaging in Python. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you.
Si Pyenv peut être utilisé à l'avance, il y aura moins de problèmes lors de l'installation.
Dans l'explication suivante, l'exécution de Python est supposée être effectuée par la commande python
.
Pour MacOS / Linux, installez Poetry comme suit.
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
Exécutez source ~ / .bashrc
pour MacOS et source ~ / .profile
pour Ubuntu pour passer le chemin de la commande poetry
.
Si vous exécutez poetry -h
et obtenez une aide propre, c'est OK.
Pour installer Poetry avec la commande python3
, reportez-vous à la section" Installer Poetry avec la commande python3 "à la fin de cet article.
Créez un nouveau projet Python avec la commande new
de Poetry.
Exécutez poetry new greet
à n'importe quel endroit pour créer un nouveau projet Python greet
.
L'ensemble de fichiers requis pour créer le package greet
est automatiquement créé.
greet
├── greet
│ └── __init__.py
├── pyproject.toml
├── README.rst
└── tests
├── __init__.py
└── test_greet.py
pyproject.toml
Il est utilisé lors de la création d'un package à partir d'un projet avec poetry install
décrit plus loin.
Lors de l'exécution de la commande, si vous regardez de près, vous pouvez voir que Poetry crée temporairement setup.py.
[tool.poetry.dependencies] et [tool.poetry.dev-dependencies] répertorient les packages utilisés dans le projet et leurs versions.
Il est automatiquement mis à jour lorsque les packages dépendants sont installés.
Vous pouvez installer le package Python utilisé dans le projet avec la commande ʻadd, Par défaut,
virtualenv` crée automatiquement un environnement virtuel pour votre projet et l'installe dans celui-ci.
L'outil greet
utilise les packages Python suivants.
Exécutez ce qui suit dans le répertoire greet
où se trouve pyproject.toml
.
poetry add cleo
poetry add --dev flake8 autopep8
Pour dev, installez avec l'option --dev / -D
de la commande ʻadd. Cela vous permet de spécifier l'option
--no-dev lors de l'installation d'un package de projet (ici, le package
greet) avec
poetry install` et d'ignorer l'installation des packages qui ne sont pas nécessaires à l'exécution.
Si vous exécutez poetry add ...
sur Ubuntu et obtenez l'erreur suivante, exécutez ʻapt-get install python3-venv` selon le message d'erreur et cela fonctionnera correctement.
Creating virtualenv greet-b6grBBry-py3.6 in /root/.cache/pypoetry/virtualenvs
The virtual environment was not created successfully because ensurepip is not
available. On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.
apt-get install python3-venv
You may need to use sudo with that command. After installing the python3-venv
package, recreate your virtual environment.
Failing command: ['/root/.cache/pypoetry/virtualenvs/greet-b6grBBry-py3.6/bin/python', '-Im', 'ensurepip', '--upgrade', '--default-pip']
Si vous utilisez VSCode, sélectionnez l'interpréteur Python utilisé par VSCode dans l'environnement virtuel créé par Poetry.
Le chemin de l'environnement virtuel peut être confirmé par le chemin de poetry env info
, alors spécifiez-le.
Par exemple, dans le cas suivant, spécifiez / root / .cache / pypoetry / virtualenvs / greet-b6grBBry-py3.6
.
$ poetry env info
Virtualenv
Python: 3.6.9
Implementation: CPython
Path: /root/.cache/pypoetry/virtualenvs/greet-b6grBBry-py3.6
Valid: True
System
Platform: linux
OS: posix
Python: /usr
Exécutez poetry shell
dans le répertoire greet
contenant pyproject.toml pour entrer dans l'environnement virtuel de ce projet.
Créez l'application.py suivante dans le répertoire greet / greet
.
Cleo est un package CLI Python qui vous permet d'ajouter facilement des commandes et des options et de rendre la sortie joliment colorée. J'utilise aussi la poésie.
greet/greet/application.py
from cleo import Command, argument, option, Application
class HelloCommand(Command):
name = 'hello'
description = 'Say hello to someone'
arguments = [argument('name', 'Name of a person to hello')]
def handle(self):
self.line(f'Hello {self.argument("name")}!')
class GoodnightCommand(Command):
name = 'goodnight'
description = 'Say goodnight to someone'
arguments = [argument('name', 'Name of a person to goodnight')]
options = [option('sleeping', 's', 'Sleeping...')]
def handle(self):
if self.option('s'):
self.line('zzz')
else:
self.line(f'Goodnight {self.argument("name")}...')
application = Application()
application.add_commands(HelloCommand(), GoodnightCommand())
def main():
application.run()
Ajoutez ce qui suit au fichier pyproject.toml.
greet/pyproject.toml
[tool.poetry.scripts]
greet = 'application:main'
[tool.poetry.scripts]
correspond aux points_entrée de setuptools, et est spécifié comme `<command_name> = '<module_name>: <function_name>' '.
En conséquence, la fonction principale de application.py est exécutée lorsque la commande de bienvenue est exécutée.
Exécutez poetry install
dans le répertoire greet
où se trouve pyproject.toml.
Si vous utilisez poetry install --no-dev
, le paquet dev ne sera pas installé.
Utilisez poetry install
à des fins de développement, et utilisez poetry install --no-dev
si vous voulez juste utiliser le paquet.
Comme indiqué dans l'objectif au début, la commande greet
peut être exécutée dans l'environnement virtuel comme suit.
$ greet hello John
Hello John!
$ greet goodnight John
Goodnight John...
$ greet goodnight --sleeping John
zzz
Exécutez greet -h
et vous devriez voir une jolie aide colorée par Cleo.
Ce qui précède est le but de cet article.
Appendix
Supposons qu'il n'y ait pas de commande python
(il n'y a pas de python
dans / usr / bin
et seulement python3
).
Si vous utilisez la commande python3
, vous pouvez l'installer avec:
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
Si nécessaire, exécutez ʻecho'alias python = "python3" '>> ~ / .bashrc && source ~ / .bashrcpour rendre Python3 exécutable avec la commande
python, puis
curl ... python Vous pouvez installer Poetry avec `.
Cependant, dans les deux cas, Poetry ne peut pas être exécuté avec l'erreur suivante même après avoir passé le chemin après l'installation.
/usr/bin/env: ‘python’: No such file or directory
La cause est que Poetry utilise l'interpréteur utilisé pour l'installation lors de son exécution, mais #! / Usr / bin / env python
est codé en dur sur la première ligne de ~ / .poetry / bin / poetry
. C'est parce qu'il essaie d'utiliser / usr / bin / python
même s'il est installé avec python3
, et il peut être utilisé normalement en réécrivant ceci dans #! / Usr / bin / env python3
.
(issue: https://github.com/python-poetry/poetry/issues/1543)
Comme solution pour l'état sans la commande python
(l'état où il n'y a pas de python
dans / usr / bin
et seulement python3
), ln -s / usr / bin / python3 / usr / bin / python
Même si vous créez un lien symbolique avec puis installez Poetry avec curl ... python
, cela fonctionne bien.
De plus, soyez prudent lorsque vous exécutez Python2 avec la commande python
et Python3 avec la commande python3
.
Utiliser Pyenv, passer à la série 3 et installer Poetry semble être le moins gênant.
En partageant le fichier pyproject.toml dans le référentiel, l'environnement de développement peut être préparé.
Si vous êtes nouveau dans le développement, clonez simplement le référentiel puis exécutez poetry install
dans le répertoire contenant le fichier pyproject.toml pour couper l'environnement virtuel de ce projet Python et y installer les packages requis. Est fait.
Les paramètres de poésie sont répertoriés dans poetry config --list
.
Éléments de réglage | Valeur par défaut | La description |
---|---|---|
virtualenvs.create | true | poetry add Oupoetry install S'il faut utiliser un environnement virtuel lors de l'exécution. Notez que s'il est défini sur false, cela affectera l'environnement direct. Par exemple, à l'état fauxpoetry install --no-dev Lorsque vous exécutez pyproject.Les packages de développement répertoriés dans toml sont désinstallés de l'environnement direct. |
virtualenvs.in-project | false | poetry virtualenvs.in-project true Peut être défini sur true avec. Les fichiers pour l'environnement virtuel seront créés dans le projet. Par conséquent, lorsque le répertoire du projet est supprimé, l'environnement virtuel peut être supprimé en même temps. |
Pour installer le package directement dans l'environnement local, vous pouvez définir virtualenvs.create
sur false, mais si vous installez le package avec poetry install --no-dev
, le package dev sera désinstallé de l'environnement local. ..
D'un autre côté, si vous installez un paquet avec poetry install
, des paquets inutiles pour le développement seront installés, il est donc difficile d'installer un paquet à utiliser dans tout l'environnement local avec Poetry. S'il vous plaît laissez-moi savoir s'il existe un bon moyen.