setup.py
distutils/setuptools/distribute
           BPStyle #7
             aodag
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
setup.py

これはなにをするものぞ
setup.py

 インストールとかする
 配布するときにつけとく
setup.pyの中身

from distutils.core import setup

setup(name="bp.bucho", version="0.1")
パッケージメタデータ

Metadata-Version: 1.0
Name: bp.bucho
Version: 0.1
Summary: UNKNOWN
Home-page: UNKNOWN
Author: UNKNOWN
Author-email: UNKNOWN
License: UNKNOWN
Description: UNKNOWN
Platform: UNKNOWN
from distutils.core import setup

setup(
    name="bp.bucho", 
    version="0.1",
    author="Atsushi Odagiri",
    author_email="aodagx@gmail.com",
    license="MIT",
    url="http://beproud.jp",
    description="bucho shows things",
    long_description="""
    bp.bucho
    ====================

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

Metadata-Version: 1.0
Name: bp.bucho
Version: 0.1
Summary: bucho shows things
Home-page: http://beproud.jp
Author: Atsushi Odagiri
Author-email: aodagx@gmail.com
License: MIT
Description: bp.bucho
        ====================
        
        bp.bucho is a sample package distribution.
        
Platform: UNKNOWN
setup.pyを実行

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

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

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

bdist_wininst
windows向けインストーラ付きのディストリビューションを作成
setuptools/distribute

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

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

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

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

または

$ pip install distribute


確認
$ easy_install --version
distribute 0.6.14
virtualenvで使う方法

virtualenv --distribute env

でも面倒なので、

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

virtualenv env


virtualenvwrapperでも有効
distributeを使ったパッケージ開発

テストする
$ python setup.py test

登録して
$ python setup.py register

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

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

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

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


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

PyPIにディストリビューションのメタデータを登録する。
メタデータの項目は以下のとおり(PEP241)
   Metadata-Version
   Name
   Version
   Platform
   Summary
   Description
   Keywords
   Home-Page
   Author
   Author-email
   License
upload

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

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

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")
setup.py のコマンドを追加する

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

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

python setup.py setup_fuga と使えるようになる。
install_requires, tests_require,
extra_require
依存するディストリビューションを書く
pipやeasy_installなどのインストーラは、
インストール時に依存するディストリビューションも取得してくれる。
extras_requireについて

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


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

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


pipでは使えないよ><
console_scripts

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

Installing Python Modules
Distributing Python Modules
PEP 241 -- Metadata for Python Software Packages
Distribute Document

Distutil setuptools distribute