6. Python Package Index(PyPI)—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.6/distutils/packageindex
移動先:案内検索

6.6。 Python Package Index(PyPI)

Python Package Index(PyPI)は、distutilsでパッケージ化されたディストリビューションを説明する meta-data と、パッケージ作成者が望む場合はディストリビューションファイルなどのパッケージデータを格納します。

Distutilsは、メタデータファイルと配布ファイルをPyPIにプッシュするための register コマンドと upload コマンドをそれぞれ提供します。 これらのコマンドの詳細については、 Distutilsコマンドを参照してください。

6.1。 PyPIの概要

PyPIを使用すると、ディストリビューションの任意の数のバージョンをインデックスに送信できます。 特定のバージョンのメタデータを変更した場合は、再度送信すると、インデックスが更新されます。

PyPIは、送信された各(名前、バージョン)の組み合わせのレコードを保持します。 特定の名前の情報を最初に送信したユーザーは、その名前の所有者に指定されます。 変更は、 register コマンドまたはWebインターフェイスを介して送信できます。 所有者は、他のユーザーを所有者またはメンテナーとして指定できます。 メンテナはパッケージ情報を編集できますが、新しい所有者またはメンテナを指定することはできません。

デフォルトでは、PyPIは特定のパッケージの最新バージョンのみを表示します。 Webインターフェイスを使用すると、このデフォルトの動作を変更して、表示および非表示にするバージョンを手動で選択できます。

バージョンごとに、PyPIはホームページを表示します。 ホームページはlong_descriptionから作成され、 register コマンドで送信できます。 詳細については、 PyPIパッケージディスプレイを参照してください。


6.2。 Distutilsコマンド

Distutilsは、パッケージデータをPyPIに送信するための2つのコマンドを公開しています。メタデータをPyPIに送信するための register コマンドと、配布ファイルを送信するための upload コマンドです。 どちらのコマンドも、 .pypircファイルと呼ばれる特別なファイルから構成データを読み取ります。

6.2.1。 NSregister 指図

distutilsコマンド register は、ディストリビューションのメタデータをインデックスサーバーに送信するために使用されます。 次のように呼び出されます。

python setup.py register

Distutilsは、次のプロンプトで応答します。

running register
We need to know who you are, so please choose either:
    1. use your existing login,
    2. register as a new user,
    3. have the server generate a new password for you (and email it to you), or
    4. quit
Your selection [default 1]:

注:ユーザー名とパスワードがローカルに保存されている場合、このメニューは表示されません。 また、.pypircファイルにクレデンシャルを保存する方法については、 .pypircファイルを参照してください。

PyPIに登録していない場合は、今すぐ登録する必要があります。 オプション2を選択し、必要に応じて詳細を入力する必要があります。 詳細を送信するとすぐに、登録の確認に使用されるメールが届きます。

登録が完了すると、メニューからオプション1を選択できます。 PyPIのユーザー名とパスワードの入力を求められ、 register がメタデータをインデックスに送信します。

register コマンドのオプションについては、追加のコマンドオプションを参照してください。


6.2.2。 NSupload 指図

distutilsコマンド upload は、配布ファイルをPyPIにプッシュします。

このコマンドは、1つ以上の配布ファイルを作成した直後に呼び出されます。 たとえば、コマンド

python setup.py sdist bdist_wininst upload

ソースディストリビューションとWindowsインストーラーがPyPIにアップロードされます。 これらは、setup.pyの以前の呼び出しを使用してビルドされた場合でもアップロードされますが、 upload コマンドを含む呼び出しのコマンドラインで指定されたディストリビューションのみがアップロードされることに注意してください。

register コマンドが以前に同じコマンドで呼び出され、パスワードがプロンプトに入力された場合、 upload は入力されたパスワードを再利用します。 これは、パスワードを.pypircファイルにクリアテキストで保存したくない場合に便利です。

--signオプションを使用して、 upload に、GPG(GNU Privacy Guard)を使用してアップロードされた各ファイルに署名するように指示できます。 gpg プログラムは、システム PATHで実行できる必要があります。 --identity=nameオプションを使用して、署名に使用するキーを指定することもできます。

upload コマンドの追加オプションについては、追加コマンドオプションを参照してください。


6.2.3。 追加のコマンドオプション

このセクションでは、 register コマンドと upload コマンドの両方に共通するオプションについて説明します。

--repositoryまたは-rオプションを使用すると、デフォルトとは異なるPyPIサーバーを指定できます。 例えば:

python setup.py sdist bdist_wininst upload -r https://example.com/pypi

.pypircファイルがそうするように構成されている場合、便宜上、URLの代わりに名前を使用できます。 例えば:

python setup.py register -r other

代替サーバーの定義の詳細については、 .pypircファイルを参照してください。

--show-responseオプションは、PyPIサーバーからの完全な応答テキストを表示します。これは、登録とアップロードの問題をデバッグするときに役立ちます。


6.2.4。 NS.pypirc ファイル

register コマンドと upload コマンドはどちらも、$HOME/.pypircの場所に.pypircファイルが存在するかどうかを確認します。 このファイルが存在する場合、コマンドはファイルで構成されたユーザー名、パスワード、およびリポジトリーURLを使用します。 .pypircファイルの形式は次のとおりです。

[distutils]
index-servers =
    pypi

[pypi]
repository: <repository-url>
username: <username>
password: <password>

distutils セクションは、リポジトリを説明するすべてのセクションの名前をリストする index-servers 変数を定義します。

リポジトリを説明する各セクションは、次の3つの変数を定義します。

  • *; repository 、PyPIサーバーのURLを定義します。 デフォルトは
    https://upload.pypi.org/legacy/
  • username 、これはPyPIサーバーに登録されているユーザー名です。
  • *; パスワード、認証に使用されます。 省略した場合、ユーザー
    必要に応じて入力を求められます。

別のサーバーを定義する場合は、新しいセクションを作成して、 index-servers 変数にリストできます。

[distutils]
index-servers =
    pypi
    other

[pypi]
repository: <repository-url>
username: <username>
password: <password>

[other]
repository: https://example.com/pypi
username: <username>
password: <password>

これにより、追加コマンドオプションで説明されているように、 register および upload コマンドを--repositoryオプションで呼び出すことができます。

具体的には、[X44X] 自体に最初にアップロードする前にテストを容易にするために PyPIテストリポジトリ.pypircに追加することをお勧めします。


6.3。 PyPIパッケージの表示

long_descriptionフィールドは、PyPIで特別な役割を果たします。 登録されたパッケージのホームページを表示するためにサーバーによって使用されます。

このフィールドに reStructuredText 構文を使用すると、PyPIはそれを解析し、パッケージホームページのHTML出力を表示します。

long_descriptionフィールドは、パッケージにあるテキストファイルに添付できます。

from distutils.core import setup

with open('README.txt') as file:
    long_description = file.read()

setup(name='Distutils',
      long_description=long_description)

その場合、README.txtは、setup.pyの他にパッケージのルートにある通常のreStructuredTextテキストファイルです。

壊れたreStructuredTextコンテンツの登録を防ぐために、docutilsパッケージで提供されている rst2html プログラムを使用して、コマンドラインからlong_descriptionを確認できます。

$ python setup.py --long-description | rst2html.py > output.html

docutilsは、構文に問題がある場合に警告を表示します。 PyPIは追加のチェックを適用するため(例: 上記のコマンドで--no-rawrst2html.pyに渡すことにより、警告なしで上記のコマンドを実行できるからといって、PyPIがコンテンツを正常に変換することは保証されません。