GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

sdispater

poetry – Pythonの依存関係管理とパッケージングが簡単になりました

投稿日:

Pythonの依存関係管理とパッケージングが簡単になりました。 https://poetry.eustace.io

詩:Pythonの依存関係管理

Poetryは、Pythonプロジェクトの依存関係を宣言、管理、インストールするのに役立ち、あらゆる場所で適切なスタックを確保できます。

Python 2.7および3.4​​+をサポートしています。

インストール

Poetryは、依存関係をベンダー化することによって、残りのシステムから分離されたpoetryをインストールするカスタムインストーラーを提供します。 これはpoetryをインストールするのに推奨される方法です。

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

あるいは、 get-poetry.pyファイルをダウンロードして別々に実行することもできます。

プレリリースバージョンをインストールしたい場合は、– get-poetry.py--previewに渡してget-poetry.py

python get-poetry.py --preview

同様に、特定のバージョンをインストールする場合は、–versionを使用します。

python get-poetry.py --version 0.7.0

poetryをインストールするためにpipを使用することも可能です。

pip install --user poetry

ただし、矛盾の原因となる詩の依存関係もインストールされることに注意してください。

poetry更新する

詩を最新の安定版にself:updateは、 self:updateコマンドを呼び出すのと同じくらい簡単です。

poetry self:update

プレリリースバージョンをインストールする場合は、– --previewオプションを使用できます。

poetry self:update --preview

最後に、特定のバージョンをインストールする場合は、それをself:updateへの引数として渡すことができます。

poetry self:update 0.8.0

Bash、Fish、またはZshのタブ補完を有効にする

poetryは、Bash、Fish、およびZshの補完スクリプトの生成をサポートしています。 詳細については、 poetry help completionsを参照してください。しかし、要点は次のいずれかを使用するのと同じくらい簡単です:

# Bash
poetry completions bash > /etc/bash_completion.d/poetry.bash-completion

# Bash (macOS/Homebrew)
poetry completions bash > $(brew --prefix)/etc/bash_completion.d/poetry.bash-completion

# Fish
poetry completions fish > ~/.config/fish/completions/poetry.fish

# Zsh
poetry completions zsh > ~/.zfunc/_poetry

注意:変更を有効にするには、シェルを再起動する必要があります。

zsh場合は、 ~/.zshrcに次の行を追加してからcompinitする必要があります。

fpath+=~/.zfunc

前書き

poetryは、Pythonパッケージのビルドとパッケージ化だけでなく、依存関係のインストールも処理するツールです。 これは、すべてのことを行うために必要なファイルは1つだけpyproject.toml 。新しい標準化された pyproject.tomlです。

言い換えれば、poetryは、 setup.pyrequirements.txtsetup.cfgMANIFEST.inと新しく追加されたPipfileを置き換えるためにpyproject.tomlを使用しrequirements.txt

[tool.poetry]
name = "my-package"
version = "0.1.0"
description = "The description of the package"

license = "MIT"

authors = [
    "Sébastien Eustace <sebastien@eustace.io>"
]

readme = 'README.md'  # Markdown files are supported

repository = "https://github.com/sdispater/poetry"
homepage = "https://github.com/sdispater/poetry"

keywords = ['packaging', 'poetry']

[tool.poetry.dependencies]
python = "~2.7 || ^3.2"  # Compatible python versions must be declared here
toml = "^0.9"
# Dependencies with extras
requests = { version = "^2.13", extras = [ "security" ] }
# Python specific dependencies with prereleases allowed
pathlib2 = { version = "^2.2", python = "~2.7", allows-prereleases = true }
# Git dependencies
cleo = { git = "https://github.com/sdispater/cleo.git", branch = "master" }

# Optional dependencies (extras)
pendulum = { version = "^1.4", optional = true }

[tool.poetry.dev-dependencies]
pytest = "^3.0"
pytest-cov = "^2.4"

[tool.poetry.scripts]
my-script = 'my_package:main'

私たちがここで気づくことができるいくつかのことがあります:

  • バージョン命名のベストプラクティスとしてセマンティックバージョン管理を実施しようとします。
  • readme、includeおよびexcludedファイルを指定することができます。MANIFEST.inはこれ以上ありません。 poetryは、VCS無視ファイル( .gitignore )を使用してexcludeセクションを設定します。
  • キーワード(5つまで)を指定することができ、パッケージングサイトでタグとして機能します。
  • 依存関係のセクションは、キャレット、チルダ、ワイルドカード、不等式および複数の要件をサポートしています。
  • パッケージに互換性のあるPythonのバージョンを指定する必要があります。

poetryはあなたがvirtualenvの中にいるかどうかを検出し、それに応じてパッケージをインストールします。 したがって、 poetryは世界中にインストールしてどこでも使用できます。

poetryには、 モリーニョにインスパイアされた本格的な依存関係解決ライブラリも付属しています。

どうして?

Pythonのパッケージングシステムと依存関係管理は、かなり混乱しており、新規参入者にとっては理解しにくいものです。 経験豊富な開発者であっても、Pythonプロジェクトに必要なすべてのファイル( setup.pyrequirements.txtsetup.cfgMANIFEST.in 、新しく追加されたPipfileを作成するのは面倒かもしれません。

だから私はすべてのことを一つの設定ファイルに限定するツール、つまり依存性管理、パッケージング、パブリッシングを望んでいました。

composer (PHP)やcargo (Rust)のような他の言語に存在するツールにもインスピレーションを与えます。

最後に、Pythonの依存関係を適切に解決するための信頼できるツールがないので、私は徹底した依存関係リゾルバをPythonコミュニティにもたらすpoetryを始めました。

Pipenvはどうですか?

要するに、私はそれが提供するCLIや決定のいくつかを好きではなく、より良い、より直観的なCLIを作ることができると思います。 私が好きではないことがいくつかあります。

依存関係の解決

依存関係の解決は不安定であり、解決策があるとしても失敗します。 例を見てみましょう:

pipenv install oslo.utils==1.4.0

このエラーで失敗します:

Could not find a version that matches pbr!=0.7,!=2.1.0,<1.0,>=0.6,>=2.0.0

Poetryはあなたに正しいパッケージを提供します:

poetry add oslo.utils=1.4.0

結果:

  - Installing pytz (2018.3)
  - Installing netifaces (0.10.6)
  - Installing netaddr (0.7.19)
  - Installing oslo.i18n (2.1.0)
  - Installing iso8601 (0.1.12)
  - Installing six (1.11.0)
  - Installing babel (2.5.3)
  - Installing pbr (0.11.1)
  - Installing oslo.utils (1.4.0)

これは、詩の中心にある効率的な依存関係リゾルバのおかげです。

ここでは正確に何が起こったのかの内訳です:

oslo.utils (1.4.0)oslo.utils (1.4.0)依存します。

  • pbr (>=0.6,!=0.7,<1.0)
  • Babel (>=1.3)
  • six (>=1.9.0)
  • iso8601 (>=0.1.9)
  • oslo.i18n (>=1.3.0)
  • netaddr (>=0.7.12)
  • netifaces (>=0.10.4)

興味のあるものはpbr (>=0.6,!=0.7,<1.0)です。

この時点で、詩はpbr==0.11.1を選択します。これは制約に合致する最新のバージョンです。

次に、 oslo.i18n==3.20.0を選択しようとします。これは、 oslo.i18n (>=1.3.0)と一致する最新バージョンです。

しかし、このバージョンではpbr (!=2.1.0,>=2.0.0)が必要pbr (!=2.1.0,>=2.0.0)これはpbr==0.11.1と互換性がないため、 pbr (>=0.6,!=0.7,<1.0)を満たすpbr (>=0.6,!=0.7,<1.0)バージョンを見つけようとします。 pbr (>=0.6,!=0.7,<1.0)

oslo.i18nのリリースを分析すると、 pbr (>=0.11,<2.0)を必要とするpbr (>=0.11,<2.0) oslo.i18n==2.1.0が検出されます。 この時点で、解決の残りの部分はそれ以上の競合がないので簡単です。

インストールコマンド

installコマンドにパッケージを指定すると、ワイルドカード依存として追加されます。 つまり、このパッケージのどのバージョンをインストールしても、互換性の問題が発生する可能性があります。

また、新しいパッケージをインストールするときに、ロックされたパッケージを更新しないように明示的に指示する必要があります。 これがデフォルトになります。

コマンドの削除

removeコマンドは、指定されたパッケージのみを削除しますが、不要になった場合はその依存関係を削除しません。

あなたはそれを修正するためにsyncまたはcleanを使用する必要があります。

スコープがあまりにも狭すぎる

最後に、 Pipfilerequirements.txtからの置き換えに過ぎず、結局はあなたのPipfile宣言したものとまったく同じ依存関係でsetup.pyファイル(またはsetup.cfg )をsetup.cfg必要があります。 したがって、最終的には、プロジェクトを適切に設定するためにいくつかの設定ファイルを管理する必要があります。

コマンド

新しい

このコマンドは、ほとんどのプロジェクトに適したディレクトリ構造を作成して、新しいPythonプロジェクトをキックスタートさせるのに役立ちます。

poetry new my-package

次のようにフォルダを作成します。

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

あなたのプロジェクトにフォルダとは異なる名前を付ける場合は、–nameオプションを渡すことができます:

poetry new my-folder --name my-package

その中に

このコマンドは、パッケージに関する基本情報を入力するように促すことで、 pyproject.tomlファイルを対話的に作成するのに役立ちます。

スマートなデフォルトを使用しながら、インタラクティブにフィールドに記入するように求めます。

poetry init

オプション

  • --name :パッケージの名前。
  • --description :パッケージの説明。
  • --author :パッケージの作成者。
  • --dependency :バージョン制約に必要なパッケージ。 形式foo:1.0.0でなければなりません。
  • --dev-dependency :開発要件--require参照してください。

インストール

installコマンドは、現在のディレクトリからpyproject.tomlファイルを読み込み、依存関係を解決してインストールします。

poetry install

現在のディレクトリにpyproject.lockファイルがある場合、 pyproject.lockファイルを解決するのではなく、正確なバージョンを使用します。 これにより、ライブラリを使用しているすべての人が同じバージョンの依存関係を取得できるようになります。

pyproject.lockファイルがない場合、Poetryは依存性解決の後に1つ作成します。

コマンドには、 --no-devオプションを渡して開発依存関係をインストールしないように指定することができます。

poetry install --no-dev

また、 – --E|--extrasオプション(詳細はExtrasを参照)を渡すことで、インストールしたいエクストラを指定することもできます。

poetry install --extras "mysql pgsql"
poetry install -E mysql -E pgsql

オプション

  • --no-dev :devの依存関係をインストールしないでください。
  • -E|--extras :インストールする機能(複数の値を許可)。

更新

依存関係の最新バージョンを取得し、 pyproject.lockファイルを更新するには、 updateコマンドを使用する必要があります。

poetry update

これにより、プロジェクトのすべての依存関係が解決され、正確なバージョンがpyproject.lockます。

すべてではなく、いくつかのパッケージを更新したいだけなら、それらを次のようにリストすることができます:

poetry update requests toml

オプション

  • --dry-run :操作を出力しますが、何も実行しません(暗黙的に–verboseを有効にします)。

追加する

addコマンドは、必要なパッケージをpyproject.tomlしてインストールします。

バージョン制約を指定しないと、詩は利用可能なパッケージのバージョンに基づいて適切なものを選択します。

poetry add requests pendulum

オプション

  • --D|dev :パッケージを開発依存として追加します。
  • --optionalオプション:オプションの依存関係として追加します。
  • --dry-run :操作を出力しますが、何も実行しません(暗黙的に–verboseを有効にします)。

除去する

removeコマンドは、インストールされているパッケージの現在のリストからパッケージを削除します。

poetry remove pendulum

オプション

  • --D|dev :開発依存からパッケージを削除します。
  • --dry-run :操作を出力しますが、何も実行しません(暗黙的に–verboseを有効にします)。

ショー

利用可能なパッケージをすべて一覧showするには、 showコマンドを使用します。

poetry show

特定のパッケージの詳細を表示する場合は、パッケージ名を渡すことができます。

poetry show pendulum

name        : pendulum
version     : 1.4.2
description : Python datetimes made easy

dependencies:
 - python-dateutil >=2.6.1
 - tzlocal >=1.4
 - pytzdata >=2017.2.2

オプション

  • --tree :依存関係をツリーとして表示します。
  • -l|--latest :最新バージョンを表示します。
  • -o|--outdated :最新バージョンを表示しますが、古いパッケージについてのみ表示します。

ビルドする

buildコマンドは、ソースとホイールのアーカイブを作成します。

poetry build

現時点では、純粋なpythonホイールのみがサポートされています。

オプション

  • -F|--format :フォーマットをwheelまたはsdistに制限します。

公開する

このコマンドは、まだビルドされていない場合はビルドし、パッケージをリモートリポジトリにパブリッシュします。

初めて提出される場合は、アップロードする前にパッケージを自動的に登録します。

poetry publish

オプション

  • -r|--repository :パッケージを登録するリポジトリ(デフォルト: pypi )。 configコマンドで設定したリポジトリ名と一致する必要があります。
  • --username (-u) :リポジトリにアクセスするためのユーザ名。
  • --password (-p) :リポジトリにアクセスするためのパスワード。

config

configコマンドを使用すると、詩設定の設定とリポジトリを編集できます。

poetry config --list

使用法

poetry config [options] [setting-key] [setting-value1] ... [setting-valueN]

setting-keyは構成オプション名であり、設定値1は構成値です。

リポジトリの変更

configセクションを変更することに加えて、configコマンドは、次の方法でリポジトリセクションを変更することもサポートしています。

poetry config repositories.foo https://foo.bar/simple/

リポジトリfooのURLがhttps://foo.bar/simple/設定されhttps://foo.bar/simple/

特定のリポジトリの資格情報を保存する場合は、簡単に行うことができます。

poetry config http-basic.foo username password

パスワードを指定しない場合は、パスワードの入力を求められます。

オプション

  • --unsetsetting-key指定された構成要素を削除します。
  • --list :現在の設定変数のリストを表示します。

サーチ

このコマンドは、リモート索引上のパッケージを検索します。

poetry search requests pendulum

オプション

  • -N|--only-name :名前だけを検索します。

ロック

このコマンドは、 pyproject.toml指定された依存関係を(インストールせずに)ロックしpyproject.toml

poetry lock

pyproject.tomlファイル

pyproject.tomlファイルのtool.poetryセクションは、複数のセクションで構成されています。

パッケージの名前。 必須

バージョン

パッケージのバージョン。 必須

これはセマンティックバージョニングに従うべきです。 しかし、それは強制されず、あなたは別の仕様に従うことが自由です。

説明

パッケージの簡単な説明。 必須

ライセンス

パッケージのライセンス。

最も一般的なライセンスの推奨表記法は(アルファベット順)です:

  • Apache-2.0
  • BSD-2-節
  • BSD-3-節
  • BSD-4-節
  • GPL-2.0
  • GPL-2.0 +
  • GPL-3.0
  • GPL-3.0 +
  • LGPL-2.1
  • LGPL-2.1 +
  • LGPL-3.0
  • LGPL-3.0 +
  • MIT

オプションですが、これを提供することを強くお勧めします。 より多くの識別子は、 SPDXオープンソースライセンス登録簿に記載されています。

著者

パッケージの作者。 これは著者のリストであり、少なくとも1人の著者が含まれている必要があります。

作成者はフォームname <email>なければなりません。

readme

パッケージのreadmeファイル。 必須

ファイルは、 README.rstまたはREADME.mdいずれかREADME.md

ホームページ

プロジェクトのウェブサイトへのURL。 オプション

リポジトリ

プロジェクトのリポジトリへのURL。 オプション

ドキュメンテーション

プロジェクトのドキュメントへのURL。 オプション

キーワード

パッケージが関連しているキーワードのリスト(最大:5)。 オプション

含めると除外する

最終パッケージに含まれるパターンのリスト。

パッケージングの目的で一組のグロブを無視するか、含まなければならないことを明示的にPoetryに指定することができます。 除外フィールドに指定されたグロブは、パッケージのビルド時に含まれていないファイルのセットを示します。

VCSがパッケージに使用されている場合、除外フィールドにはVCSの無視設定(gitの場合は.gitignoreなど)が設定されます。

[tool.poetry]
# ...
include = ["package/**/*.py", "package/**/.c"]
exclude = ["package/excluded.py"]

dependenciesdev-dependencies

PoetryはデフォルトでPyPiの依存関係を探すように設定されています。 この場合、名前とバージョン文字列のみが必要です。

[tool.poetry.dependencies]
requests = "^2.13.0"

プライベートレポジトリを使用したい場合は、以下のようにpyproject.tomlファイルに追加することができます:

[[tool.poetry.source]]
name = 'private'
url = 'http://example.com/simple'

パッケージが互換性のあるPythonバージョンを宣言することは必須です。

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

キャレット要件

Caretの要件により、指定されたバージョンに対するSemVer互換の更新が可能になります。 新しいバージョン番号がメジャー、マイナーパッチグループ内の一番左のゼロ以外の数字を変更しない場合は、更新が許可されます。 この場合、 poetry update requestsを実行した場合、詩はバージョン2.14.0更新されますが、 3.0.0は更新されません。 代わりにバージョン文字列を^0.1.13と指定した場合、詩は^0.1.13に更新され0.1.140.1.14は更新されませ0.2.0 0.0.xは他のバージョンと互換性があるとはみなされません。

次に、キャレットの要件とそれに許可されるバージョンの例をいくつか示します。

^1.2.3 := >=1.2.3 <2.0.0
^1.2 := >=1.2.0 <2.0.0
^1 := >=1.0.0 <2.0.0
^0.2.3 := >=0.2.3 <0.3.0
^0.0.3 := >=0.0.3 <0.0.4
^0.0 := >=0.0.0 <0.1.0
^0 := >=0.0.0 <1.0.0

ティルダの要件

ティルダの要件は、更新する能力を備えた最小限のバージョンを指定します。 メジャーバージョン、マイナーバージョン、およびパッチバージョン、またはメジャーバージョンとマイナーバージョンのみを指定すると、パッチレベルの変更のみが許可されます。 メジャー・バージョンのみを指定すると、マイナー・レベルおよびパッチ・レベルの変更が許可されます。

~1.2.3はティルダ要件の例です。

~1.2.3 := >=1.2.3 <1.3.0
~1.2 := >=1.2.0 <1.3.0
~1 := >=1.0.0 <2.0.0

ワイルドカード要件

ワイルドカード要件は、ワイルドカードが配置されているすべてのバージョンを許可します。

*1.* 、および1.2.*はワイルドカード要件の例です。

* := >=0.0.0
1.* := >=1.0.0 <2.0.0
1.2.* := >=1.2.0 <1.3.0

不平等の要件

不等式の要件により、バージョン範囲または正確なバージョンを手動で指定することができます

不等式の要件の例をいくつか示します。

>= 1.2.0
> 1
< 2
!= 1.2.3

複数の要件

複数のバージョン要件はカンマで区切ることもできます(例: >= 1.2, < 1.5

依存関係

gitリポジトリにあるライブラリに依存するには、指定する必要がある最小限の情報は、gitキーを持つリポジトリの場所です。

[tool.poetry.dependencies]
requests = { git = "https://github.com/requests/requests.git" }

他の情報は指定していないので、詩は、プロジェクトをビルドするためにmasterブランチで最新のコミットを使用することを想定しています。 gitキーとrevtag 、またはbranchキーを組み合わせて他のものを指定することができます。 next名前のブランチで最新のコミットを使用するように指定する例を次に示します。

[tool.poetry.dependencies]
requests = { git = "https://github.com/kennethreitz/requests.git", branch = "next" }

Pythonの制限付き依存関係

特定のPythonバージョンのみに依存関係をインストールするように指定することもできます。

[tool.poetry.dependencies]
pathlib2 = { version = "^2.2", python = "~2.7" }
[tool.poetry.dependencies]
pathlib2 = { version = "^2.2", python = ["~2.7", "^3.2"] }

scripts

このセクションでは、パッケージのインストール時にインストールされるスクリプトまたは実行可能ファイルについて説明します。

[tool.poetry.scripts]
poetry = 'poetry.console:run'

上記のtomlでパッケージをインストールした後、 poetryは、 poetryパッケージのconsole.runを実行するコマンドラインから利用可能なグローバルコマンドになります。

extras

Poetryは次の表現を可能にするための追加機能をサポートしています。

  • パッケージを強化するが、必須ではないオプションの依存関係。 そして
  • オプションの依存関係のクラスタ。
[tool.poetry]
name = "awesome"

[tool.poetry.dependencies]
# These packages are mandatory and form the core of this package’s distribution.
mandatory = "^1.0"

# A list of all of the optional dependencies, some of which are included in the
# below `extras`. They can be opted into by apps.
psycopg2 = { version = "^2.7", optional = true }
mysqlclient = { version = "^1.3", optional = true }

[tool.poetry.extras]
mysql = ["mysqlclient"]
pgsql = ["psycopg2"]

パッケージをインストールするときに、 -E|--extrasオプションを使用して追加を指定することができます:

poetry install --extras "mysql pgsql"
poetry install -E mysql -E pgsql

plugins

Poetryは、 setuptoolsのエントリポイントと同様に動作する任意のプラグインをサポートしています。 setuptoolsのマニュアルの例と一致させるには、以下を使用します。

[tool.poetry.plugins] # Optional super table

[tool.poetry.plugins."blogtool.parsers"]
".rst" = "some_module::SomeClass"

リソース







-sdispater
-, , ,

執筆者:

sdispater

poetry – Pythonの依存関係管理とパッケージングが簡単になりました

投稿日:

(さらに…)







-sdispater
-, , ,

執筆者: