Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Distutil setuptools distribute

4,284 views

Published on

Published in: Technology

Distutil setuptools distribute

  1. 1. setup.pydistutils/setuptools/distribute BPStyle #7 aodag
  2. 2. 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
  3. 3. setup.pyこれはなにをするものぞ
  4. 4. setup.py インストールとかする 配布するときにつけとく
  5. 5. setup.pyの中身from distutils.core import setupsetup(name="bp.bucho", version="0.1")
  6. 6. パッケージメタデータMetadata-Version: 1.0Name: bp.buchoVersion: 0.1Summary: UNKNOWNHome-page: UNKNOWNAuthor: UNKNOWNAuthor-email: UNKNOWNLicense: UNKNOWNDescription: UNKNOWNPlatform: UNKNOWN
  7. 7. from distutils.core import setupsetup(    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",)
  8. 8.  Metadata-Version: 1.0Name: bp.buchoVersion: 0.1Summary: bucho shows thingsHome-page: http://beproud.jpAuthor: Atsushi OdagiriAuthor-email: aodagx@gmail.comLicense: MITDescription: bp.bucho        ====================                bp.bucho is a sample package distribution.        Platform: UNKNOWN
  9. 9. setup.pyを実行buildPythonモジュールのコンパイルや、C拡張のコンパイルなどinstall指定ディレクトリ(通常はsite-packages)以下にインストール大正のパッケージをコピーsdistソースディストリビューションを作成bdist_wininstwindows向けインストーラ付きのディストリビューションを作成
  10. 10. setuptools/distribute distutilsの拡張 setup関数の引数が追加されている コマンドが追加されている プラッガブルな仕組みを提供
  11. 11. setuptoolsとdistributeの違い setuptoolsのソースを元にdistributeが作られた distributeはpython3対応 distributeは機能が増えている distributeはバグが直っている今後は、distribute使おう少なくともdistutils2が完成するまでは.
  12. 12.  $ curl -O http://python-distribute.org/distribute_setup.py$ python distribute_setup.pyまたは$ pip install distribute確認$ easy_install --versiondistribute 0.6.14
  13. 13. virtualenvで使う方法virtualenv --distribute envでも面倒なので、環境変数でいつでもdistributeを使うように変更export VIRTUALENV_USE_DISTRIBUTE=1virtualenv envvirtualenvwrapperでも有効
  14. 14. distributeを使ったパッケージ開発テストする$ python setup.py test登録して$ python setup.py registerソースディストリビューションをアップロード$ python setup.py sdist uploadドキュメントをアップロード$ python setup.py build_sphinx$ python setup.py upload_docs
  15. 15. テストsetup.py で、 setupのキーワード引数test_suite で、テストを指定する。setup.py test で、テスト実行。test_suite で パッケージ("bp.bucho"など)を指定すると、そのパッケージ以下の test_* なパッケージを再帰的に探して、TestCaseを実行する。
  16. 16. register PyPIにディストリビューションのメタデータを登録する。メタデータの項目は以下のとおり(PEP241) Metadata-Version Name Version Platform Summary Description Keywords Home-Page Author Author-email License
  17. 17. uploadPyPIにディストリビューションをアップロードする。アップロード前にregisterしておく必要あり。
  18. 18. upload_docshttp://package.python.org/{ディストリビューション}というURLにドキュメントをアップロードする。
  19. 19. プラッガブルな仕組みsetupのentry_pointsでモジュールを指定。実行時にpkg_resourcesでロードする。setup(name="bar",    ....    entry_points="""    [bp.sample.command]    barcommand = bar.commands:mainpkg_resources.get_entry_map("bar", "bp.sample.command")
  20. 20. setup.py のコマンドを追加するentry_pointsで、distutils.commands を追加するだけでOKsetup(    name="fuga",    ...    entry_points="""    [distutils.commands]    setup_fuga=fuga.commands:fugafuga    """,)python setup.py setup_fuga と使えるようになる。
  21. 21. install_requires, tests_require,extra_require依存するディストリビューションを書くpipやeasy_installなどのインストーラは、インストール時に依存するディストリビューションも取得してくれる。
  22. 22. extras_requireについてsetup(    name="hogehoge",    ...    extras_require={        "openid":[             "python-openid",        ],    },)
  23. 23. extras_requireこのときは、python-openidへの依存を追いかけないeasy_install hogehogeextraを指定してインストールするときは、そのextraの依存を追いかける。以下の場合は、python-openidへの依存を追いかけるeasy_install hogehoge[openid]pipでは使えないよ><
  24. 24. console_scriptsdistutilsのscriptsと違い、Windowsの場合は exe ファイルのラッパーまで生成してくれる。distutilsのscriptsは、実行権限をつけて、 $prefix/bin にコピーするだけ。
  25. 25. 参考Installing Python ModulesDistributing Python ModulesPEP 241 -- Metadata for Python Software PackagesDistribute Document

×