[PYTHON] Poesiestart

Poesiestart

Wir werden die grundlegende Verwendung des Python-Projektmanagement-Tools Poetry anhand einer Reihe einfacher Schritte zur Erstellung von CLI-Anwendungen zusammenfassen. Die Ausführungsumgebung wird als MacOS / Ubuntu angenommen. Die Poesieversion ist "1.0.5"

Tor

Erstellen Sie einen Befehl "grüßen", der wie folgt funktioniert. Poetry wird verwendet, um die für Befehle erforderlichen Python-Pakete zu verwalten und Befehle in einer lokalen virtuellen Umgebung zu installieren und zu verwenden.

$ greet hello John
Hello John!

$ greet goodnight John
Goodnight John...

$ greet goodnight --sleeping John
zzz

Ergänzung

Das Installieren von Paketen direkt in Ihrer lokalen Umgebung mithilfe von Poetry ist etwas schwierig. Ich habe das CLI-Tool als Thema verwendet, weil es einfach war, aber ich wusste nicht, wie ich es mit Poetry für den täglichen Gebrauch installieren sollte. Weitere Informationen finden Sie unter "Poesieeinstellungen" am Ende dieses Artikels.

Poetry

Ein Tool zum Verwalten von Abhängigkeiten und Versionen von Paketen, die in Python-Projekten verwendet werden (Hier werden die zum Erstellen eines Pakets erforderliche Verzeichnisstruktur und Dateien gemeinsam als Projekt bezeichnet.)

Da die Paketinformationen basierend auf der Datei pyproject.toml verwaltet werden, kann die für das Projekt erforderliche Umgebung einfach durch Freigabe der Datei pyproject.toml reproduziert werden. Poetry erstellt außerdem automatisch eine Vorlage für die Datei pyproject.toml.

Offiziell

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.

Poesie-Installation

Wenn Pyenv im Voraus verwendet werden kann, treten bei der Installation weniger Probleme auf.

In der folgenden Erklärung wird angenommen, dass die Ausführung von Python durch den Befehl python erfolgt.

Installieren Sie Poetry unter MacOS / Linux wie folgt.

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

Führen Sie "source ~ / .bashrc" für MacOS und "source ~ / .profile" für Ubuntu aus, um den Pfad des Befehls "poetry" zu übergeben. Wenn Sie "Poesie -h" ausführen und saubere Hilfe erhalten, ist dies in Ordnung.

Informationen zum Installieren von Poetry mit dem Befehl python3 finden Sie im Abschnitt" Installieren von Poetry mit dem Befehl python3 "am Ende dieses Artikels.

Erstellen Sie ein neues Python-Projekt

Erstellen Sie ein neues Python-Projekt mit dem Befehl "new" von Poetry.

Führen Sie "Poetry New Greet" an einem beliebigen Ort aus, um ein neues Python-Projekt "Greet" zu erstellen. Die zum Erstellen des "greet" -Pakets erforderlichen Dateien werden automatisch erstellt.

greet
├── greet
│   └── __init__.py
├── pyproject.toml
├── README.rst
└── tests
    ├── __init__.py
    └── test_greet.py

pyproject.toml Es wird verwendet, wenn ein Paket aus einem Projekt mit der später beschriebenen "Poetry Install" erstellt wird. Wenn Sie bei der Ausführung des Befehls genau hinschauen, können Sie feststellen, dass Poetry vorübergehend setup.py erstellt.

[tool.poetry.dependencies] und [tool.poetry.dev-dependencies] listen die im Projekt verwendeten Pakete und ihre Versionen auf.

Es wird automatisch aktualisiert, wenn die abhängigen Pakete installiert werden.

Python-Pakete installieren

Sie können das im Projekt verwendete Python-Paket mit dem Befehl add installieren. Standardmäßig erstellt "virtualenv" automatisch eine virtuelle Umgebung für Ihr Projekt und installiert sie darin.

Das greet Tool verwendet die folgenden Python-Pakete.

Führen Sie die folgenden Schritte im Verzeichnis "greet" aus, in dem sich "pyproject.toml" befindet.

poetry add cleo
poetry add --dev flake8 autopep8

Installieren Sie es für dev mit dem Befehl add mit der Option --dev / -D. Auf diese Weise können Sie die Option "--no-dev" angeben, wenn Sie ein Projektpaket (hier das "greet" -Paket) mit "poet install" installieren, und die Installation von Paketen überspringen, die für die Ausführung nicht benötigt werden.

Ergänzung 1

Wenn Sie "Poetry Add ..." unter Ubuntu ausführen und den folgenden Fehler erhalten, führen Sie "apt-get install python3-venv" gemäß der Fehlermeldung aus und es wird ordnungsgemäß funktionieren.

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

Ergänzung 2

Wenn Sie VSCode verwenden, wählen Sie den von VSCode verwendeten Python-Interpreter in der von Poetry erstellten virtuellen Umgebung aus. Der Pfad der virtuellen Umgebung kann durch den Pfad "Poetry Env Info" bestätigt werden. Geben Sie ihn daher an. Geben Sie im folgenden Fall beispielsweise "/ root / .cache / pypoetry / virtualenvs / greet-b6grBBry-py3.6" an.

$ 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

Implementierung des Greet-Tools

Führen Sie "Poetry Shell" im "Greet" -Verzeichnis mit pyproject.toml aus, um die virtuelle Umgebung für dieses Projekt aufzurufen.

Erstellen Sie die folgende application.py im Verzeichnis greet / greet. Cleo ist ein Python-CLI-Paket, mit dem Sie auf einfache Weise Befehle und Optionen hinzufügen und die Ausgabe schön farbig gestalten können. Ich benutze auch Poesie.

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

Bearbeiten der Datei pyproject.toml

Fügen Sie der Datei pyproject.toml Folgendes hinzu.

greet/pyproject.toml


[tool.poetry.scripts]
greet = 'application:main'

[tool.poetry.scripts] entspricht den Eintrittspunkten von setuptools und wird angegeben als <Befehlsname> = '<Modulname>: <Funktionsname>'. Infolgedessen wird die Hauptfunktion von application.py ausgeführt, wenn der Befehl greet ausgeführt wird.

Erstellen und installieren Sie das Greet-Paket

Führen Sie "Poetry Install" im "Greet" -Verzeichnis aus, in dem sich pyproject.toml befindet.

Wenn Sie poet install --no-dev verwenden, wird das dev-Paket nicht installiert. Verwenden Sie "Poetry Install" für Entwicklungszwecke und "Poetry Install --no-dev", wenn Sie nur das Paket verwenden möchten.

Überprüfen der Funktion des Befehls greet

Wie im Ziel am Anfang gezeigt, kann der Befehl "greet" in der virtuellen Umgebung wie folgt ausgeführt werden.

$ greet hello John
Hello John!

$ greet goodnight John
Goodnight John...

$ greet goodnight --sleeping John
zzz

Führen Sie greet -h aus und Sie sollten eine hübsche Hilfe sehen, die von Cleo gefärbt wurde.

Das Obige ist der Zweck dieses Papiers.


Appendix

Poetry mit dem Befehl python3 installieren

Angenommen, es gibt keinen "Python" -Befehl (es gibt keinen "Python" in "/ usr / bin" und nur "Python3").

Wenn Sie den Befehl python3 verwenden, können Sie ihn installieren mit:

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3

Führen Sie bei Bedarf echo'alias python =" python3 "'>> ~ / .bashrc && source ~ / .bashrc aus, um Python3 mit dem Befehl python ausführbar zu machen, und danncurl ... python Sie können Poetry mitinstallieren.

In beiden Fällen kann Poetry jedoch auch nach Übergabe des Pfads nach der Installation nicht mit dem folgenden Fehler ausgeführt werden.

/usr/bin/env: ‘python’: No such file or directory

Die Ursache ist, dass Poetry den Interpreter verwendet, der für die Installation verwendet wird, wenn er ausgeführt wird, aber "#! / Usr / bin / env python" in der ersten Zeile von "~ / .poetry / bin / poet" fest codiert ist. Selbst wenn Sie es mit "python3" installieren, wird versucht, "/ usr / bin / python" zu verwenden. Wenn Sie dies also in "#! / Usr / bin / env python3" umschreiben, können Sie es normal verwenden. (issue: https://github.com/python-poetry/poetry/issues/1543)

Als Lösung für den Zustand, in dem es keinen "Python" -Befehl gibt (der Zustand, in dem es keinen "Python" in "/ usr / bin" und nur "python3" gibt), "ln -s / usr / bin / python3 / usr / bin / python" Selbst wenn Sie eine symbolische Verknüpfung mit erstellen und dann Poetry mit "curl ... python" installieren, funktioniert dies einwandfrei.

Seien Sie außerdem vorsichtig, wenn Sie Python2 mit dem Befehl python und Python3 mit dem Befehl python3 ausführen.

Mit Pyenv scheint der Wechsel zu 3er und die Installation von Poetry die geringsten Probleme zu haben.

Mehrpersonenentwicklung mit Poesie

Durch Freigeben der Datei pyproject.toml im Repository kann die Entwicklungsumgebung vorbereitet werden. Wenn Sie neu in der Entwicklung sind, klonen Sie einfach das Repository und führen Sie dann "poet install" in dem Verzeichnis aus, das die Datei "pyproject.toml" enthält, um die virtuelle Umgebung für dieses Python-Projekt abzuschneiden und die erforderlichen Pakete darin zu installieren. Ist fertig.

Poesieeinstellungen

Die Poetry-Einstellungen sind in der Poetry Config - List aufgeführt.

Elemente einstellen Standardwert Erläuterung
virtualenvs.create true poetry addOderpoetry installGibt an, ob bei der Ausführung eine virtuelle Umgebung verwendet werden soll. Beachten Sie, dass sich die Einstellung auf false auf die direkte Umgebung auswirkt. Zum Beispiel im falschen Zustandpoetry install --no-devWenn Sie pyproject ausführen.Die in toml aufgelisteten Entwicklungspakete werden aus der direkten Umgebung deinstalliert.
virtualenvs.in-project false poetry virtualenvs.in-project trueKann mit auf true gesetzt werden. Dateien für die virtuelle Umgebung werden im Projekt erstellt. Wenn das Projektverzeichnis gelöscht wird, kann daher gleichzeitig die virtuelle Umgebung gelöscht werden.

Um das Paket direkt in der lokalen Umgebung zu installieren, können Sie "virtualenvs.create" auf "false" setzen. Wenn Sie das Paket jedoch mit "poet install --no-dev" installieren, wird das Entwicklungspaket aus der lokalen Umgebung deinstalliert. .. Wenn Sie dagegen ein Paket mit "Poetry Install" installieren, werden unnötige Pakete für Entwickler installiert, sodass es schwierig ist, ein Paket zu installieren, das in der gesamten lokalen Umgebung mit Poetry verwendet werden kann. Bitte lassen Sie mich wissen, ob es einen guten Weg gibt.

Recommended Posts

Poesiestart
Tkinter beginnt
Jupyter beginnt
PyCharm beginnt
Poesie deinstallieren
Django startete Teil 1
Jupyter Lab beginnt
Django startete Teil 4
Empfehlung der Poesie