25
setup.py distutils/setuptools/distribute BPStyle #7 aodag

Distutil setuptools distribute

Embed Size (px)

Citation preview

Page 1: Distutil setuptools distribute

setup.pydistutils/setuptools/distribute

BPStyle #7aodag

Page 2: Distutil setuptools distribute

Pythonのパッケージインストールしたことあるよね

$ wget http://pypi.python.org/packages/source/b/bucho/bucho-0.0.4.tar.gz$ tar xvf bucho-0.0.4.tar.gz$ cd bucho-0.0.4$ python setup.py install

Page 3: Distutil setuptools distribute

setup.py

これはなにをするものぞ

Page 4: Distutil setuptools distribute

setup.py

インストールとかする配布するときにつけとく

Page 5: Distutil setuptools distribute

setup.pyの中身

from distutils.core import setup

setup(name="bp.bucho", version="0.1")

Page 6: Distutil setuptools distribute

パッケージメタデータ

Metadata-Version: 1.0Name: bp.buchoVersion: 0.1Summary: UNKNOWNHome-page: UNKNOWNAuthor: UNKNOWNAuthor-email: UNKNOWNLicense: UNKNOWNDescription: UNKNOWNPlatform: UNKNOWN

Page 7: Distutil setuptools distribute

from distutils.core import setup

setup(    name="bp.bucho",     version="0.1",    author="Atsushi Odagiri",    author_email="[email protected]",    license="MIT",    url="http://beproud.jp",    description="bucho shows things",    long_description="""\    bp.bucho    ====================

    bp.bucho is a sample package distribution.    """,    packages="bp.bucho",)

Page 8: Distutil setuptools distribute

 

Metadata-Version: 1.0Name: bp.buchoVersion: 0.1Summary: bucho shows thingsHome-page: http://beproud.jpAuthor: Atsushi OdagiriAuthor-email: [email protected]: MITDescription: bp.bucho        ====================                bp.bucho is a sample package distribution.        Platform: UNKNOWN

Page 9: Distutil setuptools distribute

setup.pyを実行

buildPythonモジュールのコンパイルや、C拡張のコンパイルなど

install指定ディレクトリ(通常はsite-packages)以下にインストール大正のパッケージをコピー

sdistソースディストリビューションを作成

bdist_wininstwindows向けインストーラ付きのディストリビューションを作成

Page 10: Distutil setuptools distribute

setuptools/distribute

distutilsの拡張setup関数の引数が追加されているコマンドが追加されているプラッガブルな仕組みを提供

Page 11: Distutil setuptools distribute

setuptoolsとdistributeの違い

setuptoolsのソースを元にdistributeが作られたdistributeはpython3対応distributeは機能が増えているdistributeはバグが直っている

今後は、distribute使おう少なくともdistutils2が完成するまでは.

Page 12: Distutil setuptools distribute

 

$ curl -O http://python-distribute.org/distribute_setup.py$ python distribute_setup.py

または

$ pip install distribute

確認$ easy_install --versiondistribute 0.6.14

Page 13: Distutil setuptools distribute

virtualenvで使う方法

virtualenv --distribute env

でも面倒なので、

環境変数でいつでもdistributeを使うように変更export VIRTUALENV_USE_DISTRIBUTE=1

virtualenv env

virtualenvwrapperでも有効

Page 14: Distutil setuptools distribute

distributeを使ったパッケージ開発

テストする$ python setup.py test

登録して$ python setup.py register

ソースディストリビューションをアップロード$ python setup.py sdist upload

ドキュメントをアップロード$ python setup.py build_sphinx$ python setup.py upload_docs

Page 15: Distutil setuptools distribute

テスト

setup.py で、 setupのキーワード引数test_suite で、テストを指定する。

setup.py test で、テスト実行。

test_suite で パッケージ("bp.bucho"など)を指定すると、そのパッケージ以下の test_* なパッケージを再帰的に探して、TestCaseを実行する。

Page 16: Distutil setuptools distribute

register 

PyPIにディストリビューションのメタデータを登録する。メタデータの項目は以下のとおり(PEP241)

Metadata-VersionNameVersionPlatformSummaryDescriptionKeywordsHome-PageAuthorAuthor-emailLicense

Page 17: Distutil setuptools distribute

upload

PyPIにディストリビューションをアップロードする。アップロード前にregisterしておく必要あり。

Page 18: Distutil setuptools distribute

upload_docs

http://package.python.org/{ディストリビューション}というURLにドキュメントをアップロードする。

Page 19: Distutil setuptools distribute

プラッガブルな仕組み

setupのentry_pointsでモジュールを指定。実行時にpkg_resourcesでロードする。

setup(name="bar",    ....    entry_points="""    [bp.sample.command]    barcommand = bar.commands:main

pkg_resources.get_entry_map("bar", "bp.sample.command")

Page 20: Distutil setuptools distribute

setup.py のコマンドを追加する

entry_pointsで、distutils.commands を追加するだけでOK

setup(    name="fuga",    ...    entry_points="""    [distutils.commands]    setup_fuga=fuga.commands:fugafuga    """,)

python setup.py setup_fuga と使えるようになる。

Page 21: Distutil setuptools distribute

install_requires, tests_require, extra_require依存するディストリビューションを書くpipやeasy_installなどのインストーラは、インストール時に依存するディストリビューションも取得してくれる。

Page 22: Distutil setuptools distribute

extras_requireについて

setup(    name="hogehoge",    ...    extras_require={        "openid":[             "python-openid",        ],    },)

Page 23: Distutil setuptools distribute

extras_require

このときは、python-openidへの依存を追いかけないeasy_install hogehoge

extraを指定してインストールするときは、そのextraの依存を追いかける。以下の場合は、python-openidへの依存を追いかけるeasy_install hogehoge[openid]

pipでは使えないよ><

Page 24: Distutil setuptools distribute

console_scripts

distutilsのscriptsと違い、Windowsの場合は exe ファイルのラッパーまで生成してくれる。distutilsのscriptsは、実行権限をつけて、 $prefix/bin にコピーするだけ。

Page 25: Distutil setuptools distribute

参考

Installing Python ModulesDistributing Python ModulesPEP 241 -- Metadata for Python Software PackagesDistribute Document