[Python] Poesie Ich habe angefangen & Eindruck, dass ich von Pipenv zu Poesie gewechselt bin

Motivation

Ich habe es heutzutage mit Gedichten versucht, weil die Installation von pipenv ziemlich langsam ist. Ich werde zusammenfassen, was ich gefunden habe, nachdem ich alles verwendet habe. Da ich Pipenv benutze, kann ich es damit vergleichen. Weitere Informationen finden Sie unter Offizielles Dokument, da hier keine paketbezogenen Befehle (Erstellen, Veröffentlichen ...) oder detaillierte Funktionen beschrieben werden.

Über Poesie

Poetry ist ein Python-Paketverwaltungstool. Lösen Sie wie Pipenv die Abhängigkeiten und installieren / deinstallieren Sie Pakete. Mit der Datei poetry.lock können andere Benutzer das Paket mit der entsprechenden Version und den entsprechenden Abhängigkeiten installieren. Eine virtuelle Umgebung ist verfügbar und eine Verpackung ist ebenfalls möglich.

Umgebung

Python verwendet die von pyenv installierte.

Einführung

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

PATH wird in ~. / Bash_profile eingegeben und die Poesie startet.

$ poetry -V
Poetry version 1.0.2

Poesieeinstellungen

Im Fall von pipenv wurde die Umgebungsvariable verwendet, um den Ordner ".venv" im Projekt festzulegen.

Pipenv


$ export PIPENV_VENV_IN_PROJECT=1
$ pipenv install...

Im Fall von Poesie wird aus "Poesiekonfiguration" gesetzt. Sie können die aktuellen Einstellungen mit der Option --list überprüfen. Der Standardwert ist "virtualenvs.in-project = false".

poetry


$ poetry config --list
cache-dir = "/home/user/.cache/pypoetry"
virtualenvs.create = true
virtualenvs.in-project = false
virtualenvs.path = "{cache-dir}/virtualenvs"  # /home/user/.cache/pypoetry/virtualenvs

Ändern Sie die Einstellungen.

python


$ poetry config virtualenvs.in-project true
$ poetry config --list
cache-dir = "/home/user/.cache/pypoetry"
virtualenvs.create = true
virtualenvs.in-project = true
virtualenvs.path = "{cache-dir}/virtualenvs"  # /home/user/.cache/pypoetry/virtualenvs

Projektstart

Modellgenerierung

Starten Sie das Projekt mit "Poesie neu" und eine Vorlage wird generiert. Das Folgende ist gemäß Official Doc.

$ poetry new my-package
Created package my_package in my-package

Generiertes Briefpapier


my-package
├── pyproject.toml
├── README.rst
├── my_package
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_my_package.py

Das generierte pyproject.toml ist wie folgt. Es scheint, dass pytest automatisch in dev-Abhängigkeiten enthalten ist.

pyproject.toml


[tool.poetry]
name = "my-package"
version = "0.1.0"
description = ""
authors = ["Your Name <[email protected]>"]

[tool.poetry.dependencies]
python = "^3.7"

[tool.poetry.dev-dependencies]
pytest = "^5.2"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

Es ist jedoch schwierig, das Verzeichnis my_package in my-package zu verwenden. Sie können den Verzeichnisnamen im Paket mit der Option --name ändern.

---- name Option

$ poetry new my-package --name app
Created package app in my-package

Modell


my-package
├── pyproject.toml
├── README.rst
├── app
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_my_package.py

-- - src Option

Es scheint eine --src Option zu geben, aber es ist komplizierter, also benutze sie nicht.

$ poetry new --src my-package

Modell


├── pyproject.toml
├── README.rst
├── src
│   └── my_package
│       └── __init__.py
└── tests
    ├── __init__.py
    └── test_my_package.py

Generiere pyproject.toml

Wenn Sie keine Vorlage benötigen, können Sie nur "pyproject.toml" mit "Poesie" erstellen. Bestimmen Sie interaktiv den Inhalt von pyproject.toml wie npm init.

$ poetry init

Package name [{folder_name}]:
Version [0.1.0]:
Description []:
Author [None, n to skip]:  n
License []:
Compatible Python versions [^3.7]:

Would you like to define your main dependencies interactively? (yes/no) [yes] no
Would you like to define your dev dependencies (require-dev) interactively (yes/no) [yes] no
Generated file

[tool.poetry]
name = "new_ais"
version = "0.1.0"
description = ""
authors = ["Your Name <[email protected]>"]

[tool.poetry.dependencies]
python = "^3.7"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

Do you confirm generation? (yes/no) [yes] yes

Wenn Sie für den Paketnamen nichts eingeben, ist dies der Ordnername. Geben Sie j / n für Autor und Abhängigkeiten ein. Dadurch wird "pyproject.toml" im aktuellen Verzeichnis erstellt.

Wenn Sie es genauso wie Pipenv verwenden, scheint es einfacher zu sein, mit init zu beginnen.

install

poet install löst wie pipenv install Abhängigkeiten auf und installiert die erforderlichen Pakete aus der oben erstellten pyproject.toml.

$ poetry new myapp
$ cd myapp
$ poetry install
reating virtualenv myapp in /home/user/workspace/poetry/myapp/.venv
Updating dependencies
Resolving dependencies... (0.5s)

Writing lock file

Package operations: 11 installs, 0 updates, 0 removals

  - Installing more-itertools (8.1.0)
  - Installing zipp (1.0.0)
  - Installing importlib-metadata (1.4.0)
  - Installing pyparsing (2.4.6)
  - Installing six (1.14.0)
  - Installing attrs (19.3.0)
  - Installing packaging (20.0)
  - Installing pluggy (0.13.1)
  - Installing py (1.8.1)
  - Installing wcwidth (0.1.8)
  - Installing pytest (5.3.2)
  - Installing myapp (0.1.0)

Bei der Installation wird eine poetry.lock-Datei erstellt und Sie können die Abhängigkeiten sehen.

---- no-root Option

Poesie installiert standardmäßig myapp. Um dies zu vermeiden, installieren Sie mit der Option "--no-root".

  $ poetry install --no-root

---- no-dev Option

Wenn Sie keine Dev-Abhängigkeiten installieren, ist die Option "--no-dev" in Ordnung.

  $ poetry install --no-dev

add

Installieren Sie das Paket. Beachten Sie, dass es sich im Gegensatz zu Pipenv um ein Add handelt. Das Verriegeln ist schneller als das Pipenv.

$ poetry add django==2.2.8

Für Dev-Abhängigkeiten die Option --dev (-D).

$ poetry add flake8 -D

Wenn Sie die Option "--dry-run" verwenden, können Sie sehen, was installiert ist, ohne es zu installieren.

$ poetry add django --dry-run
Using version ^3.0.2 for django

Updating dependencies
Resolving dependencies... (0.4s)

Package operations: 4 installs, 0 updates, 0 removals, 13 skipped

  - Skipping more-itertools (8.1.0) Already installed
  - Skipping zipp (1.0.0) Already installed
  - Skipping importlib-metadata (1.4.0) Already installed
  - Skipping pyparsing (2.4.6) Already installed
  - ...

update

Beim Aktualisieren der im Projekt installierten Pakete

$ poetry update

Individuell aktualisieren

$ poetry update requests django

Wie beim Hinzufügen können Sie den Inhalt des Updates mit der Option "--dry-run" anzeigen.

$ poetry update --dry-run
Updating dependencies
Resolving dependencies... (0.4s)

No dependencies to install or update

  - Skipping more-itertools (8.1.0) Already installed
  - Skipping zipp (1.0.0) Already installed
  - Skipping importlib-metadata (1.4.0) Already installed
  - Skipping pyparsing (2.4.6) Already installed
  - Skipping six (1.14.0) Already installed
  - Skipping atomicwrites (1.3.0) Not needed for the current environment
  - ...

remove

Löschen Sie das installierte Paket.

$ poetry remove flask

Beachten Sie, dass in dev-Abhängigkeiten installierte Pakete die Option "--dev (-D)" erfordern.

$ poetry add flake8 -D

$ poetry remove flake8 # failed
[ValueError]
Package flake8 not found

$ poetry remove flake8 -D # OK

Sie können auch die Option "--dry-run" mit remove verwenden.

show

Zeigen Sie eine Liste der verfügbaren Pakete an. Funktionen wie eine erweiterte Version von pip list.

$ poetry show
asgiref            3.2.3  ASGI specs, helper code, and ada...
attrs              19.3.0 Classes Without Boilerplate
django             3.0.2  A high-level Python Web framewor...
entrypoints        0.3    Discover and load entry points f...
flake8             3.7.9  the modular source code checker:...
importlib-metadata 1.4.0  Read metadata from Python packages
mccabe             0.6.1  McCabe checker, plugin for flake8
more-itertools     8.1.0  More routines for operating on i...
packaging          20.0   Core utilities for Python packages
pluggy             0.13.1 plugin and hook calling mechanis...
...

Informationen zu Paketen können ebenfalls angezeigt werden.

$ poetry show django
name         : django
version      : 3.0.2
description  : A high-level Python Web framework that
            encourages rapid development and clean, pragmatic
            design.

dependencies
 - asgiref >=3.2,<4.0
 - pytz *
 - sqlparse >=0.2.2

---- Baum Option

Abhängigkeiten können in einer Baumstruktur angezeigt werden. Eine ähnliche Funktion wie "pipenv graph". Eigentlich ist es leicht zu sehen, da es sich um eine farbige Ausgabe handelt.

  $ poetry show --tree
  django 3.0.2 A high-level Python Web framework that encourages rapid development and clean, pragmatic design.
  ├── asgiref >=3.2,<4.0
  ├── pytz *
  └── sqlparse >=0.2.2
  flake8 3.7.9 the modular source code checker: pep8, pyflakes and co
  ├── entrypoints >=0.3.0,<0.4.0
  ├── mccabe >=0.6.0,<0.7.0
  ├── pycodestyle >=2.5.0,<2.6.0
  └── pyflakes >=2.1.0,<2.2.0
  ...

---- neueste (-l) Option

Zeigen Sie die neueste Version an.

  $ poetry show --latest
  asgiref            3.2.3  3.2.3  ASGI specs, helper code, a...
  attrs              19.3.0 19.3.0 Classes Without Boilerplate
  django             3.0.2  3.0.2  A high-level Python Web fr...
  entrypoints        0.3    0.3    Discover and load entry po...
  flake8             3.7.9  3.7.9  the modular source code ch...
  importlib-metadata 1.4.0  1.4.0  Read metadata from Python ...

--- veraltete (-o)Option

Ansicht älterer Pakete.

  $ poetry show -o
  django 2.2.4 3.0.2 A high-level Python Web framework that e...

lock

Sperren Sie die in pyproject.toml angegebene Abhängigkeit. (Nicht installieren) poetry.lock wird generiert.

$ poetry lock

env

Befehle für die virtuelle Umgebung. Sie können 3.7.4 usw. im [Python] -Teil angeben.

$ poetry env info            #Informationen zur aktuellen virtuellen Umgebung
$ poetry env list            #Liste der virtuellen Umgebungen
$ poetry env remove <python> #Virtuelle Umgebung löschen
$ poetry env use <python>    #Aktivieren oder erstellen Sie eine virtuelle Umgebung

In meiner Umgebung wurde "virtualenvs.in-project = true" nicht in der Liste angezeigt und das Entfernen funktionierte nicht. Es ist eine gute Idee, .venv / zu löschen.

shell

Starten Sie die Shell in der virtuellen Umgebung. Entspricht "pipenv shell".

$ poetry shell

scripts

Sie können das Skript ausführen, indem Sie Folgendes in pyproject.toml eingeben.

pyproject.toml


[tool.poetry.scripts]
start = "script:main"

script.py


def main():
    print("Run script with poetry!")
$ poetry run start
Run script with poetry!

Selbst wenn Sie die virtuelle Umgebung nicht betreten, wird sie in der virtuellen Umgebung ausgeführt, wenn Sie sie über ein Skript ausführen.

Umgang mit Argumenten

Betrachtet man den [ausführbaren Code für Skripte] der Poesie (https://github.com/python-poetry/poetry/blob/master/poetry/console/commands/run.py), so scheint es, dass keine Argumente übergeben werden können.

poetry/console/commands/run.py


    #Ausführungscode für Gedichtskripte
    def run_script(self, script, args):
        if isinstance(script, dict):
            script = script["callable"]

        module, callable_ = script.split(":")

        src_in_sys_path = "sys.path.append('src'); " if self._module.is_in_src() else ""

        cmd = ["python", "-c"]

        cmd += [
            "import sys; "
            "from importlib import import_module; "
            "sys.argv = {!r}; {}"
            "import_module('{}').{}()".format(args, src_in_sys_path, module, callable_) #Lauf
        ]

        return self.env.execute(*cmd)

Mit den obigen Skripteinstellungen wird "import_module (" script "). Main ()" ausgeführt, sodass es überhaupt keinen Teil gibt, an dem Argumente übergeben werden können. Ich habe in Pipenv oft start =" python manage.py runserver 0.0.0.0:8000 " registriert, also war ich in Schwierigkeiten.

pyproject.toml


[tool.poetry.scripts]
start = "manage:main"

Wenn Sie dann "Poetry Run Start Runserver 0.0.0.0: 8000" einstellen, funktioniert dies. .. ..

Impressionen

-Gut (im Vergleich zu pipenv) Das Installieren, Hinzufügen, Entfernen und Sperren ist schneller (wichtig) als bei Pipenv, und die Anzeige auf der Konsole ist gut sichtbar. Die Funktionen, die "pip list" und "pipenv graph" entsprechen, sind ebenfalls ziemlich leicht zu erkennen.

-Perfekt (im Vergleich zu pipenv) Zusammenarbeit mit venv. Es kann mit der gleichen Benutzerfreundlichkeit wie Pipenv verwendet werden. (Ich mache mir Sorgen um das Verhalten zum Zeitpunkt von venv im Projekt) Es scheint keine Funktion zu geben, mit der pyenv über pipenv installiert werden kann, aber es ist in Ordnung, weil ich es nicht oft benutze.

-Bad (im Vergleich zu pipenv) Immerhin der Skriptteil. Es gab viele Probleme, also warte ich auf Verbesserungen. Ich habe das Gefühl, dass es viele Möglichkeiten gibt. Denk dran.

In Anbetracht der obigen Punkte scheint es, dass wir Poesie verwenden werden. Apropos Luxus, ich hätte wissen müssen, ob es Entwickler bei der "Poetry Show" war.

Referenz

Recommended Posts

[Python] Poesie Ich habe angefangen & Eindruck, dass ich von Pipenv zu Poesie gewechselt bin
[Python3] Liste der Websites, auf die ich beim Starten von Python verwiesen habe
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Warum ich von Java zu Dart gewechselt bin
Ich möchte ein Glas aus Python verwenden
Ich habe Python gestartet
Ich möchte mit Python eine E-Mail von Google Mail senden.
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 1/3
Ich möchte Ceres Solver aus Python verwenden
Was ich beim Update von Python 2.6 auf 2.7 gemacht habe
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 2/3
Ich möchte C ++ - Code aus Python-Code erstellen!
Die Geschichte vom Umzug von Pipenv zur Poesie
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Ich fing an zu analysieren
Python, das ich Anfängern in der Programmierung empfehlen möchte
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Ich wollte die Python-Bibliothek von MATLAB verwenden
Aufbau der Python-Entwicklungsumgebung 2020 [Von der Python-Installation bis zur Einführung in die Poesie]
Ich hatte das Gefühl, dass ich den Python-Code nach C ++ 98 portiert habe.
Post von Python nach Slack
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Flirte von PHP nach Python
Python-Bedingungsextraktion aus der Liste, die ich oft vergesse
Ich möchte viele Prozesse von Python aus starten
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Migrieren Sie von require.txt zu pipenv
Ich habe versucht, einen Generator zu erstellen, der mit Python eine C # -Containerklasse aus CSV generiert
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Ich möchte das Paket aus den Anforderungen.txt mit Poesie installieren
Ich möchte eine Nachricht von Python an LINE Bot senden
Stellen Sie von Python aus eine Verbindung zu SQLite her
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe etwas mit Python gemacht, das sich JETZT LADEN auf dem Terminal von links nach rechts bewegt
Ich habe einen verstümmelten Generator erstellt, der Ihre Lieblingssätze von UTF-8 bis Shift-JIS (cp932) in Python codiert
Erste Schritte mit Poetry Von der Installation über die Ausführung bis hin zur Versionsverwaltung
Eine Geschichte, die ich süchtig danach war, Lambda von AWS Lambda anzurufen.
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich las "Das Lernen mit Python von der Einführung bis zur Praxis stärken", Kapitel 1
Ich las "Das Lernen mit Python von der Einführung bis zur Praxis stärken", Kapitel 2
[Python] Ein Hinweis, dass ich das Verhalten von matplotlib.pyplot zu verstehen begann
Rufen Sie Matlab von Python zur Optimierung auf
Link, um mit Python zu beginnen
Ich habe versucht, Python zu berühren (Installation)
Post von Python auf Facebook Timeline
[Lambda] [Python] Von Lambda auf Twitter posten!
Erste Schritte mit Python
Stellen Sie von Python aus eine Verbindung zur utf8mb4-Datenbank her
Python (vom ersten Mal bis zur Ausführung)
Poste ein Bild von Python auf Tumblr
So greifen Sie über Python auf Wikipedia zu
Python, um von einer anderen Sprache zu wechseln
Ich möchte mit Python debuggen
Hat sich nicht von Python 2 auf 3 geändert
Aktualisieren Sie Mac Python von 2 auf 3