サーチ…


備考

pypaサンプルプロジェクトには、setup-toolsが提供しなければならない幅広い機能を示す完全かつ簡単に変更可能なテンプレートsetup.pyが含まれています。

前書き

すべてのパッケージには、パッケージを記述するsetup.pyファイルが必要です。

単純なパッケージの次のディレクトリ構造を考えてみましょう。

+-- package_name
|       |
|       +-- __init__.py
|       
+-- setup.py

__init__.pyには、 def foo(): return 100という行だけが含まれていますdef foo(): return 100

次のsetup.pyはパッケージを定義します:

from setuptools import setup


setup(
    name='package_name',                    # package name
    version='0.1',                          # version
    description='Package Description',      # short description
    url='http://example.com',               # package URL
    install_requires=[],                    # list of packages this package depends
                                            # on.
    packages=['package_name'],              # List of module names that installing
                                            # this package will provide.
)

virtualenvは他のPython環境を変更することなくパッケージのインストールをテストするのに最適です:

$ virtualenv .virtualenv
...
$ source .virtualenv/bin/activate
$ python setup.py install
running install
...
Installed .../package_name-0.1-....egg
...
$ python
>>> import package_name
>>> package_name.foo() 
100

PyPIへのアップロード

setup.pyが完全に機能したら( はじめにを参照)、パッケージをPyPIに簡単にアップロードできます。

.pypircファイルの設定

このファイルには、アカウントを認証するためのログインとパスワードが格納されています。通常、ホームディレクトリに格納されます。

# .pypirc file

[distutils]
index-servers =
  pypi
  pypitest

[pypi]
repository=https://pypi.python.org/pypi
username=your_username
password=your_password

[pypitest]
repository=https://testpypi.python.org/pypi
username=your_username
password=your_password

パッケージをアップロードするにはtwineを使用する方が安全ですので、インストールされていることを確認してください。

$ pip install twine

testpypiへの登録とアップロード(オプション)

注意PyPIではアップロードされたパッケージを上書きすることはできませんので、まずtestpypiなどの専用のテストサーバでデプロイメントをテストすることが賢明です。このオプションについて説明します。 カレンダーのバージョニングセマンティックバージョニングなど、アップロードする前にパッケージのバージョニングスキームを検討してください。

testpypiでログインするか、新しいアカウントを作成してください 。 1回以上の登録は有害ではありませんが、初めての登録のみが必要です。

$ python setup.py register -r pypitest

あなたのパッケージのルートディレクトリにある間:

$ twine upload dist/* -r pypitest

あなたのパッケージはあなたのアカウントからアクセスできるようになりました。

テスト

テスト仮想環境を作る。 testpypiまたはPyPIのいずれかからパッケージをpip installください。

# Using virtualenv
$ mkdir testenv
$ cd testenv
$ virtualenv .virtualenv
...
$ source .virtualenv/bin/activate
# Test from testpypi
(.virtualenv)  pip install --verbose --extra-index-url https://testpypi.python.org/pypi package_name
...
# Or test from PyPI
(.virtualenv) $ pip install package_name
...

(.virtualenv) $ python
Python 3.5.1 (default, Jan 27 2016, 19:16:39)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import package_name
>>> package_name.foo()
100

成功した場合、あなたのパッケージは少なくともインポート可能です。 PyPIへの最終アップロードの前に、あなたのAPIをテストすることを検討するかもしれません。テスト中にパッケージ化に失敗した場合は、心配しないでください。あなたはそれを修正し、testpypiに再アップロードして、再度テストすることができます。

PyPIへの登録とアップロード

twineが取り付けられていることを確認しtwine

$ pip install twine

ログインするか、 PyPIで新しいアカウントを作成してください。

$ python setup.py register -r pypi
$ twine upload dist/*

それでおしまい!あなたのパッケージは現在公開されています。

バグを発見した場合は、新しいバージョンのパッケージをアップロードするだけです。

ドキュメンテーション

あなたのパッケージに少なくとも何らかのドキュメントを含めることを忘れないでください。 PyPiはデフォルトのフォーマット言語reStructuredTextを取ります。

Readme

パッケージに大きなドキュメントがない場合は、他のユーザーがREADME.rstファイルに役立つ情報を含めてREADME.rst 。ファイルが準備ができたら、PyPiにそれを示すように指示するために別のファイルが必要です。

setup.cfgファイルを作成し、次の2行を入力します。

[metadata]
description-file = README.rst

Markdownファイルをパッケージに入れようとすると、PyPiは書式設定なしで純粋なテキストファイルとして読み込みます。

ライセンス

OpenSourceライセンスの 1つを使用してLICENSE.txtファイルをパッケージに入れて、商用プロジェクトなどでパッケージを使用できるかどうか、またはライセンスでコードを使用できるかどうかを伝えることは、たいていの場合です。

より読みやすい方法で、いくつかのライセンスはTL; DRで説明されています

パッケージを実行可能にする

あなたのパッケージがライブラリだけでなく、パッケージがインストールされているときにショーケースまたはスタンドアロンアプリケーションとして使用できるコードがある場合は、そのコードを__main__.pyファイルに入れます。

__main__.pypackage_nameフォルダに入れます。この方法でコンソールから直接実行することができます:

python -m package_name

使用可能な__main__.pyファイルがない場合、パッケージはこのコマンドで実行されず、このエラーが出力されます。

python: package_name.__main__;という名前のモジュールはありませんpackage_name.__main__; 'package_name'はパッケージであり、直接実行することはできません。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow