python packaging (pyfes 2012.03 発表資料)
DESCRIPTION
original: https://docs.google.com/presentation/d/1Gx6UptFjAeTe1bjahs0iELhksDF3Wkt-XaXWAg0arDM/edit#slide=id.ga78539f_0_0TRANSCRIPT
運用コストが半分になった!
Pythonパッケージの極意
そんなウマい話は無ぇ!
PYTHON PACKAGINGPython2/3対応
おまえ誰よ
清水川 貴之 (@shimizukawa) ● 代々木のBeProudでそろそろ1年● PyCon JP 2012 副座長● インドネシア帰り(印度尼西亜 【尼】)
● 書籍
○ 2010「エキスパートPythonプログラミング」○ 2012「Pythonプロフェッショナルプログラミング」
● 2940円● 430ページ● 3/27(火)● 秀和システム
コンセプト
● BPStyle
BP本
4部構成 1. Pythonで開発しよう2. チーム開発のサイクル3. サービス公開4. 開発を加速するテクニック
BP本の目次
第1章:Pythonを始めよう第2章:Webアプリケーションを作る Appendix A: VirtualBoxのセットアップ
Appendix B: OS(Ubuntu)のセットアップ
第1部:Pythonで開発しよう
第3章:チームの開発環境を整える第4章:ドキュメントの基盤を整える第5章:課題管理とレビュー第6章:モジュール分割設計と単体テスト第7章:パッケージングと環境セットアップの自動化第8章:Mercurialによるソースコード管理第9章:Jenkinsで継続的インテグレーション
第2部:チーム開発のサイクル
第10章:環境構築とデプロイの自動化第11章:アプリケーションのパフォーマンス改善第12章:Google App Engine 第4部:開発を加速するテクニック
第13章:テストを味方にする第14章:Djangoを便利に使う第15章:便利なPythonモジュールを使おう
第3部:サービス公開
● 2940円● 430ページ● 3/27(火)● 秀和システム
コンセプト
● BP得
BP本
今日のレシピ
1. Pythonパッケージング過去・現在・未来2. Distutils2 / packaging3. pysetupの使い方4. パッケージの作り方5. 次の課題
今日のレシピ
1. Pythonパッケージング過去・現在・未来2. Distutils2 / packaging3. pysetupの使い方4. パッケージの作り方5. 次の課題
現在の状況
複数の方法が混在 ● パッケージング● 配布● 発見● インストール
過去と現在
過去 現在 未来
setuptools Distribute
distutils distutils
pip利用
現在と未来
過去 現在 未来
setuptools Distribute
distutils distutils
pip
packagingdistutils2
機能
を取
り込
み
delete
利用
新しいライブラリ Distutils2 / packaging
今までの制限を解消した新しいライブラリ ● Python標準ライブラリ● パッケージ検索機能● インストールコマンド● アンインストール機能● 外部依存ライブラリ管理
未来
新標準● PEP345: Metadata1.2● PEP376: インストール情報DB● PEP386: バージョン番号標準
上記を実装した新しいライブラリ● packaging : Python-3.3同梱● Distutils2 : Python-2.5 - 3.2 向けに配布
PEP345 : Metadata 1.2
ゴール新しいメタデータを定義して、他の配布物との依存や関係を今よりうまく定義します。
モチベーションこれまでもsetutools/distributeのinstall_requiresでモジュールの依存関係は定義出来ましたが、これは標準ではありませんでした。また、現在のinstall_requiresでの指定はsetup.pyを動かさないと依存関係が分からないため、OSやPythonのバージョンによって動かせるかどうか左右されていました。
PEP376 : インストール情報データベース
ゴール複数のパッケージ管理ソフトで相互運用できる、Pythonのインストール情報データベースを用意しよう。
モチベーション既存のツール(distutils, setuptools/distribute/easy_install, pip)はそれぞれ独自の方法でインストール情報を管理しています。多くのツールがアンインストールをサポートしていません。インストール済みパッケージ情報を取得するような標準APIがありません。
PEP386 : バージョン番号標準
ゴールバージョン番号付けの標準化
モチベーションパッケージのどのバージョンがインストールされているかを知りたい。標準がない状態でこういった機能を作るのは、pip等のインストーラーにとって非常に厳しかった。 Pseudo-formatN.N[.N]+[{a|b|c|rc}N[.N]+][.postN][.devN]
こんなバージョン番号があったよ
● 2C.py 02 Jun 2010● abl.jquery.ui 1.8.7-3● abu.rpc 0.2.7-rc5-protobuf-2.4● Agatsuma 0.2.176.default.
3499b00918ca.tip● aksy 0.3-SNAPSHOT-r1389● appwsgi default
新しいパッケージングライブラリ
ゴール新しい標準のパッケージングライブラリを提供します。新標準を実装し、これまでのライブラリの機能を拡張しています。
モチベーションsetuptoolsは多くの価値のある機能を提供してくれました。しか
し、あくまでもdistutilsの上で動作するようにデザインされていました。distutilsの実装を変更することは既存の全てのツールが動作し
なくなる可能性があります。このため、新標準を実装するために新しいライブラリにする必要がありました。
今日のレシピ
1. Pythonパッケージング過去・現在・未来2. Distutils2 / packaging3. pysetupの使い方4. パッケージの作り方5. 次の課題
pysetupの使い方:Srcインストール
従来のインストール
ソースディレクトリでpython setup.py install
新しい方法
ソースディレクトリでpysetup run install_dist
pysetupの使い方:Zipインストール
従来のインストール
zipファイルを展開してpython setup.py install
新しい方法
pysetup install widget-0.9.7.zip
pysetupの使い方:PyPIインストール
従来のインストール
Python標準ではPyPIインストール出来ないpip install blockdiag
新しい方法
pysetup install blockdiag
pysetupの使い方:URLインストール
従来のインストール
Python標準ではURLインストール出来ないpip install http://......../bucho-0.1.1.tgz
新しい方法
pysetup install http://......../bucho-0.1.1.tgz
pysetupの使い方:アンインストール
従来のアンインストール
Python標準ではアンインストールは手動pip uninstall blockdiag
新しい方法
pysetup remove blockdiag
pysetupの使い方:PyPI検索
従来のPyPI検索
Python標準ではPyPI検索とか無いpip search bucho
新しい方法
pysetup search bucho
pysetupの使い方:インストール一覧
従来の一覧取得
site-packagesやeasy_install.pthを見るpip freeze
新しい方法
pysetup list
pysetupの使い方:メタデータ参照
従来のメタデータ参照
Python標準ではメタデータを持っていない
easy_install/pipならPKG-INFOファイルを見る
新しい方法
pysetup metadata bucho -f name -f version
pysetupの使い方:Graph
従来には無いコマンド
Python標準, easy_install, pip には無い
にゅーふぇーす : graph
pysetup graph blockdiag
今日のレシピ
1. Pythonパッケージング過去・現在・未来2. Distutils2 / packaging3. pysetupの使い方4. パッケージの作り方5. 次の課題
パッケージの作り方
ドキュメントを読んでいると以下のように書いてある
3.2. A Simple Examplefrom packaging.core import setupsetup(name='foo', version='1.0', py_modules=['foo'])
パッケージの作り方
頭から読めば丁寧に書いてあった 1. Packaging tutorial
$ pysetup create対話形式でsetup.cfg作れる
パッケージの作り方
既存のsetup.py持ってるんだけど...
setup.pyのあるディレクトリで
$ pysetup createA legacy setup.py has been found.Would you like to convert it to a setup.cfg? (y/n)[y]: yWrote "setup.cfg".
setup.cfgの書き方
2. Specification of the setup.cfg file 嫁[metadata]name = buchoversion = 0.1.1summary = `bucho` is a package for exercises.
:classifier = Topic :: Utilities Programming Language :: Python :: 3.2
:[files]packages = bucho
後方互換パッケージの作り方
古い環境のためにsetup.pyが必要なんだけど...
setup.cfgのあるディレクトリで
$ pysetup generate-setupThe setup.py was generated
今日のレシピ
1. Pythonパッケージング過去・現在・未来2. Distutils2 / packaging3. pysetupの使い方4. パッケージの作り方5. 次の課題
課題
1. ドキュメントが古い○ Distutils2のドキュメントは放置されてるのでPython3.3
のpackagingのドキュメントを読もう
2. Windowsで動かない機能が多い○ みんなでデバッグしよう!
3. d2/p にはeggサポートが無い
○ MLで*.pbdサポートが議論されている
4. pluginの仕組みが無い
○ setuptoolsのentry_points相当の機能が無い
課題
ドキュメントが古い
○ packagingのドキュメントが古くて試すのが大変from packaging.core import setup とか存在しない
5. "import distutils2" vs "import packaging"
○ Python 3.3 以前と以降で名前が違う
try: import packagingexcept ImportError: import distutils2 as packaging
課題
7. ドキュメントが古い○ 「今後1ヶ月で書いていくよ」って開発者がMLで言ってた
8. virtualenvとか未対応?
○ virtualenv環境下でpysetup install
Unable to write in "/usr/lib/python2.7/site-packages". Do you have the permissions ?
まとめ
期待の新星 Distutils2/packaging 運用コストはもしかしたら半分に減るかもしれない でもまだまだ実装やドキュメントが追いついてない みんなで叩いて良くしていこう!
PyConJP 2012 スタッフ募集
● 2940円● 430ページ● 3/27(火)● 秀和システム
BP本
Terima kasih【尼】ありがとう