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.
運用コストが半分になった!
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章:Mercuria...
第3部:サービス公開

第10章:環境構築とデプロイの自動化
第11章:アプリケーションのパフォーマンス改善
第12章:Google App Engine

第4部:開発を加速するテクニック

第13章:テストを味方にする
第14章:Djang...
BP本
●   2940円
●   430ページ
●   3/27(火)
●   秀和システム


コンセプト

● BP得
今日のレシピ

1.   Pythonパッケージング過去・現在・未来
2.   Distutils2 / packaging
3.   pysetupの使い方
4.   パッケージの作り方
5.   次の課題
今日のレシピ

1.   Pythonパッケージング過去・現在・未来
2.   Distutils2 / packaging
3.   pysetupの使い方
4.   パッケージの作り方
5.   次の課題
現在の状況

複数の方法が混在

●   パッケージング
●   配布
●   発見
●   インストール
過去と現在

  過去                      現在          未来

setuptools   Distribute         pip
                           利用




 di...
現在と未来

  過去                      現在                             未来

setuptools   Distribute                               ...
新しいライブラリ Distutils2 / packaging

今までの制限を解消した新しいライブラリ

●   Python標準ライブラリ
●   パッケージ検索機能
●   インストールコマンド
●   アンインストール機能
●   外部...
未来

新標準
● PEP345: Metadata1.2
● PEP376: インストール情報DB
● PEP386: バージョン番号標準

上記を実装した新しいライブラリ
● packaging : Python-3.3同梱
● Distu...
PEP345 : Metadata 1.2

ゴール
新しいメタデータを定義して、他の配布物との依存や関係を今
よりうまく定義します。


モチベーション
これまでもsetutools/distributeのinstall_requiresでモ...
PEP376 : インストール情報データベース

ゴール
複数のパッケージ管理ソフトで相互運用できる、Pythonのイン
ストール情報データベースを用意しよう。


モチベーション
既存のツール(distutils, setuptools/di...
PEP386 : バージョン番号標準

ゴール
バージョン番号付けの標準化


モチベーション
パッケージのどのバージョンがインストールされているかを知り
たい。標準がない状態でこういった機能を作るのは、pip等のイ
ンストーラーにとって非常に...
こんなバージョン番号があったよ

● 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.
...
新しいパッケージングライブラリ
ゴール
新しい標準のパッケージングライブラリを提供します。新標準を
実装し、これまでのライブラリの機能を拡張しています。

モチベーション
setuptoolsは多くの価値のある機能を提供してくれました。しか
し...
今日のレシピ

1.   Pythonパッケージング過去・現在・未来
2.   Distutils2 / packaging
3.   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 i...
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 buch...
pysetupの使い方:Graph

従来には無いコマンド

 Python標準, easy_install, pip には無い

にゅーふぇーす : graph

 pysetup graph blockdiag
今日のレシピ

1.   Pythonパッケージング過去・現在・未来
2.   Distutils2 / packaging
3.   pysetupの使い方
4.   パッケージの作り方
5.   次の課題
パッケージの作り方

ドキュメントを読んでいると以下のように書いてあ
る
3.2. A Simple Example
   from packaging.core import setup
   setup(name='foo',
      ...
パッケージの作り方

頭から読めば丁寧に書いてあった

1. Packaging tutorial
   $ pysetup create
   対話形式でsetup.cfg作れる
パッケージの作り方

既存のsetup.py持ってるんだけど...
 setup.pyのあるディレクトリで
 $ pysetup create
 A legacy setup.py has been found.
 Would you like...
setup.cfgの書き方

2. Specification of the setup.cfg file 嫁
[metadata]
name = bucho
version = 0.1.1
summary = `bucho` is a pac...
後方互換パッケージの作り方

古い環境のためにsetup.pyが必要なんだけど...
   setup.cfgのあるディレクトリで
   $ pysetup generate-setup
The setup.py was generated
今日のレシピ

1.   Pythonパッケージング過去・現在・未来
2.   Distutils2 / packaging
3.   pysetupの使い方
4.   パッケージの作り方
5.   次の課題
課題

1. ドキュメントが古い
  ○ Distutils2のドキュメントは放置されてるのでPython3.3
    のpackagingのドキュメントを読もう

2. Windowsで動かない機能が多い
  ○ みんなでデバッグしよう!
...
課題
ドキュメントが古い
  ○ packagingのドキュメントが古くて試すのが大変
      from packaging.core import setup とか存在しない


5. "import distutils2" vs "im...
課題

7. ドキュメントが古い
   ○ 「今後1ヶ月で書いていくよ」って開発者がMLで言ってた

8. virtualenvとか未対応?
  ○ virtualenv環境下でpysetup install

    Unable to wr...
まとめ

期待の新星 Distutils2/packaging

運用コストはもしかしたら半分に減るかもしれない

でもまだまだ実装やドキュメントが追いついてない

みんなで叩いて良くしていこう!
PyConJP 2012 スタッフ募集
BP本
●   2940円
●   430ページ
●   3/27(火)
●   秀和システム
Terima kasih
  【尼】ありがとう
Upcoming SlideShare
Loading in …5
×

of

PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 1 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 2 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 3 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 4 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 5 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 6 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 7 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 8 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 9 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 10 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 11 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 12 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 13 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 14 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 15 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 16 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 17 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 18 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 19 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 20 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 21 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 22 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 23 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 24 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 25 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 26 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 27 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 28 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 29 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 30 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 31 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 32 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 33 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 34 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 35 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 36 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 37 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 38 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 39 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 40 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 41 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 42 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 43 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 44 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 45 PYTHON PACKAGING (PyFes 2012.03 発表資料) Slide 46
Upcoming SlideShare
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
Next
Download to read offline and view in fullscreen.

6 Likes

Share

Download to read offline

PYTHON PACKAGING (PyFes 2012.03 発表資料)

Download to read offline

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

Related Books

Free with a 30 day trial from Scribd

See all

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 / packaging 3. pysetupの使い方 4. パッケージの作り方 5. 次の課題
  12. 12. 今日のレシピ 1. Pythonパッケージング過去・現在・未来 2. Distutils2 / packaging 3. 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-format N.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 / packaging 3. 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 / packaging 3. 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 = bucho version = 0.1.1 summary = `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-setup The setup.py was generated
  39. 39. 今日のレシピ 1. Pythonパッケージング過去・現在・未来 2. Distutils2 / packaging 3. 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 【尼】ありがとう
  • YOwatari

    Aug. 25, 2013
  • yhchan

    Aug. 14, 2013
  • tim518

    Aug. 12, 2013
  • kokotaro

    Mar. 20, 2012
  • TakeshiWatanabe2

    Mar. 19, 2012
  • mitsukuni

    Mar. 19, 2012

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

Views

Total views

2,497

On Slideshare

0

From embeds

0

Number of embeds

173

Actions

Downloads

12

Shares

0

Comments

0

Likes

6

×