[PYTHON] Début de la poésie

Début de la poésie

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

objectif

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

Supplément

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.

Installation de poésie

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éer un nouveau projet Python

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.

Installer des packages Python

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.

Supplément 1

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']

Supplément 2

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

Mise en place de l'outil de bienvenue

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()

Modification du fichier pyproject.toml

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.

Créer et installer le package de bienvenue

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.

Vérification du fonctionnement de la commande de bienvenue

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

Installation de Poetry avec la commande python3

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 commandepython, 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.

Développement multi-personnes à l'aide de la poésie

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.

Paramètres de poésie

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 addOupoetry installS'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-devLorsque 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 truePeut ê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.

Recommended Posts

Début de la poésie
Tkinter commence
Jupyter commence
PyCharm commence
désinstaller poésie
Django a commencé la partie 1
Jupyter Lab commence
Django a commencé la partie 4
Recommandation de poésie