0
運用コストが半分になった!Pythonパッケージの極意
そんなウマい話は無ぇ!
PYTHON PACKAGING    Python2/3対応
おまえ誰よ清水川 貴之 (@shimizukawa)● 代々木のBeProudでそろそろ1年● PyCon JP 2012 副座長● インドネシア帰り(印度尼西亜 【尼】)● 書籍  ○ 2010「エキスパートPythonプログラミング」  ○...
BP本●   2940円●   430ページ●   3/27(火)●   秀和システムコンセプト● BPStyle
BP本の目次4部構成1.   Pythonで開発しよう2.   チーム開発のサイクル3.   サービス公開4.   開発を加速するテクニック
第1部:Pythonで開発しよう第1章:Pythonを始めよう第2章:Webアプリケーションを作るAppendix A: VirtualBoxのセットアップAppendix B: OS(Ubuntu)のセットアップ
第2部:チーム開発のサイクル第3章:チームの開発環境を整える第4章:ドキュメントの基盤を整える第5章:課題管理とレビュー第6章:モジュール分割設計と単体テスト第7章:パッケージングと環境セットアップの自動化第8章:Mercurialによるソース...
第3部:サービス公開第10章:環境構築とデプロイの自動化第11章:アプリケーションのパフォーマンス改善第12章:Google App Engine第4部:開発を加速するテクニック第13章:テストを味方にする第14章:Djangoを便利に使う第1...
BP本●   2940円●   430ページ●   3/27(火)●   秀和システムコンセプト● BP得
今日のレシピ1.   Pythonパッケージング過去・現在・未来2.   Distutils2 / packaging3.   pysetupの使い方4.   パッケージの作り方5.   次の課題
今日のレシピ1.   Pythonパッケージング過去・現在・未来2.   Distutils2 / packaging3.   pysetupの使い方4.   パッケージの作り方5.   次の課題
現在の状況複数の方法が混在●   パッケージング●   配布●   発見●   インストール
過去と現在  過去                      現在          未来setuptools   Distribute         pip                           利用 distutils   ...
現在と未来  過去                      現在                             未来setuptools   Distribute                                   ...
新しいライブラリ Distutils2 / packaging今までの制限を解消した新しいライブラリ●   Python標準ライブラリ●   パッケージ検索機能●   インストールコマンド●   アンインストール機能●   外部依存ライブラリ管理
未来新標準● PEP345: Metadata1.2● PEP376: インストール情報DB● PEP386: バージョン番号標準上記を実装した新しいライブラリ● packaging : Python-3.3同梱● Distutils2 : P...
PEP345 : Metadata 1.2ゴール新しいメタデータを定義して、他の配布物との依存や関係を今よりうまく定義します。モチベーションこれまでもsetutools/distributeのinstall_requiresでモジュールの依存関...
PEP376 : インストール情報データベースゴール複数のパッケージ管理ソフトで相互運用できる、Pythonのインストール情報データベースを用意しよう。モチベーション既存のツール(distutils, setuptools/distribute...
PEP386 : バージョン番号標準ゴールバージョン番号付けの標準化モチベーションパッケージのどのバージョンがインストールされているかを知りたい。標準がない状態でこういった機能を作るのは、pip等のインストーラーにとって非常に厳しかった。Pse...
こんなバージョン番号があったよ● 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.  3499...
新しいパッケージングライブラリゴール新しい標準のパッケージングライブラリを提供します。新標準を実装し、これまでのライブラリの機能を拡張しています。モチベーションsetuptoolsは多くの価値のある機能を提供してくれました。しかし、あくまでもd...
今日のレシピ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 ht...
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...
pysetupの使い方:Graph従来には無いコマンド Python標準, easy_install, pip には無いにゅーふぇーす : graph pysetup graph blockdiag
今日のレシピ1.   Pythonパッケージング過去・現在・未来2.   Distutils2 / packaging3.   pysetupの使い方4.   パッケージの作り方5.   次の課題
パッケージの作り方ドキュメントを読んでいると以下のように書いてある3.2. A Simple Example   from packaging.core import setup   setup(name=foo,       version=...
パッケージの作り方頭から読めば丁寧に書いてあった1. Packaging tutorial   $ pysetup create   対話形式でsetup.cfg作れる
パッケージの作り方既存のsetup.py持ってるんだけど... setup.pyのあるディレクトリで $ pysetup create A legacy setup.py has been found. Would you like to co...
setup.cfgの書き方2. Specification of the setup.cfg file 嫁[metadata]name = buchoversion = 0.1.1summary = `bucho` is a package f...
後方互換パッケージの作り方古い環境のために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 ...
課題ドキュメントが古い  ○ packagingのドキュメントが古くて試すのが大変      from packaging.core import setup とか存在しない5. "import distutils2" vs "import p...
課題7. ドキュメントが古い   ○ 「今後1ヶ月で書いていくよ」って開発者がMLで言ってた8. virtualenvとか未対応?  ○ virtualenv環境下でpysetup install    Unable to write in "...
まとめ期待の新星 Distutils2/packaging運用コストはもしかしたら半分に減るかもしれないでもまだまだ実装やドキュメントが追いついてないみんなで叩いて良くしていこう!
PyConJP 2012 スタッフ募集
BP本●   2940円●   430ページ●   3/27(火)●   秀和システム
Terima kasih  【尼】ありがとう
Upcoming SlideShare
Loading in...5
×

PYTHON PACKAGING (PyFes 2012.03 発表資料)

1,677

Published on

original: https://docs.google.com/presentation/d/1Gx6UptFjAeTe1bjahs0iELhksDF3Wkt-XaXWAg0arDM/edit#slide=id.ga78539f_0_0

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,677
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
11
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Transcript of "PYTHON PACKAGING (PyFes 2012.03 発表資料)"

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

    Clipping is a handy way to collect important slides you want to go back to later.

×