python packaging (pyfes 2012.03 発表資料)

46
運用コストが半分になった! Pythonパッケージの極意

Upload: takayuki-shimizukawa

Post on 28-Jun-2015

1.685 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: PYTHON PACKAGING (PyFes 2012.03 発表資料)

運用コストが半分になった!

Pythonパッケージの極意

Page 2: PYTHON PACKAGING (PyFes 2012.03 発表資料)

そんなウマい話は無ぇ!

Page 3: PYTHON PACKAGING (PyFes 2012.03 発表資料)

PYTHON PACKAGINGPython2/3対応

Page 4: PYTHON PACKAGING (PyFes 2012.03 発表資料)

おまえ誰よ

清水川 貴之 (@shimizukawa) ● 代々木のBeProudでそろそろ1年● PyCon JP 2012 副座長● インドネシア帰り(印度尼西亜 【尼】)

● 書籍

○ 2010「エキスパートPythonプログラミング」○ 2012「Pythonプロフェッショナルプログラミング」

Page 5: PYTHON PACKAGING (PyFes 2012.03 発表資料)

● 2940円● 430ページ● 3/27(火)● 秀和システム

コンセプト

● BPStyle

BP本

Page 6: PYTHON PACKAGING (PyFes 2012.03 発表資料)

4部構成 1. Pythonで開発しよう2. チーム開発のサイクル3. サービス公開4. 開発を加速するテクニック

BP本の目次

Page 7: PYTHON PACKAGING (PyFes 2012.03 発表資料)

第1章:Pythonを始めよう第2章:Webアプリケーションを作る Appendix A: VirtualBoxのセットアップ

Appendix B: OS(Ubuntu)のセットアップ

第1部:Pythonで開発しよう

Page 8: PYTHON PACKAGING (PyFes 2012.03 発表資料)

第3章:チームの開発環境を整える第4章:ドキュメントの基盤を整える第5章:課題管理とレビュー第6章:モジュール分割設計と単体テスト第7章:パッケージングと環境セットアップの自動化第8章:Mercurialによるソースコード管理第9章:Jenkinsで継続的インテグレーション

第2部:チーム開発のサイクル

Page 9: PYTHON PACKAGING (PyFes 2012.03 発表資料)

第10章:環境構築とデプロイの自動化第11章:アプリケーションのパフォーマンス改善第12章:Google App Engine 第4部:開発を加速するテクニック

第13章:テストを味方にする第14章:Djangoを便利に使う第15章:便利なPythonモジュールを使おう

第3部:サービス公開

Page 10: PYTHON PACKAGING (PyFes 2012.03 発表資料)

● 2940円● 430ページ● 3/27(火)● 秀和システム

コンセプト

● BP得

BP本

Page 11: PYTHON PACKAGING (PyFes 2012.03 発表資料)

今日のレシピ

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

Page 12: PYTHON PACKAGING (PyFes 2012.03 発表資料)

今日のレシピ

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

Page 13: PYTHON PACKAGING (PyFes 2012.03 発表資料)

現在の状況

複数の方法が混在 ● パッケージング● 配布● 発見● インストール

Page 14: PYTHON PACKAGING (PyFes 2012.03 発表資料)

過去と現在

過去 現在 未来

setuptools Distribute

distutils distutils

pip利用

Page 15: PYTHON PACKAGING (PyFes 2012.03 発表資料)

現在と未来

過去 現在 未来

setuptools Distribute

distutils distutils

pip

packagingdistutils2

機能

を取

り込

delete

利用

Page 16: PYTHON PACKAGING (PyFes 2012.03 発表資料)

新しいライブラリ Distutils2 / packaging

今までの制限を解消した新しいライブラリ ● Python標準ライブラリ● パッケージ検索機能● インストールコマンド● アンインストール機能● 外部依存ライブラリ管理

Page 17: PYTHON PACKAGING (PyFes 2012.03 発表資料)

未来

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

上記を実装した新しいライブラリ● packaging : Python-3.3同梱● Distutils2 : Python-2.5 - 3.2 向けに配布

Page 18: PYTHON PACKAGING (PyFes 2012.03 発表資料)

PEP345 : Metadata 1.2

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

モチベーションこれまでもsetutools/distributeのinstall_requiresでモジュールの依存関係は定義出来ましたが、これは標準ではありませんでした。また、現在のinstall_requiresでの指定はsetup.pyを動かさないと依存関係が分からないため、OSやPythonのバージョンによって動かせるかどうか左右されていました。

Page 19: PYTHON PACKAGING (PyFes 2012.03 発表資料)

PEP376 : インストール情報データベース

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

モチベーション既存のツール(distutils, setuptools/distribute/easy_install, pip)はそれぞれ独自の方法でインストール情報を管理しています。多くのツールがアンインストールをサポートしていません。インストール済みパッケージ情報を取得するような標準APIがありません。

Page 20: PYTHON PACKAGING (PyFes 2012.03 発表資料)

PEP386 : バージョン番号標準

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

モチベーションパッケージのどのバージョンがインストールされているかを知りたい。標準がない状態でこういった機能を作るのは、pip等のインストーラーにとって非常に厳しかった。 Pseudo-formatN.N[.N]+[{a|b|c|rc}N[.N]+][.postN][.devN]

Page 21: PYTHON PACKAGING (PyFes 2012.03 発表資料)

こんなバージョン番号があったよ

● 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

Page 22: PYTHON PACKAGING (PyFes 2012.03 発表資料)

新しいパッケージングライブラリ

ゴール新しい標準のパッケージングライブラリを提供します。新標準を実装し、これまでのライブラリの機能を拡張しています。

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

し、あくまでもdistutilsの上で動作するようにデザインされていました。distutilsの実装を変更することは既存の全てのツールが動作し

なくなる可能性があります。このため、新標準を実装するために新しいライブラリにする必要がありました。

Page 23: PYTHON PACKAGING (PyFes 2012.03 発表資料)

今日のレシピ

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

Page 24: PYTHON PACKAGING (PyFes 2012.03 発表資料)

pysetupの使い方:Srcインストール

従来のインストール

ソースディレクトリでpython setup.py install

新しい方法

ソースディレクトリでpysetup run install_dist

Page 25: PYTHON PACKAGING (PyFes 2012.03 発表資料)

pysetupの使い方:Zipインストール

従来のインストール

zipファイルを展開してpython setup.py install

新しい方法

pysetup install widget-0.9.7.zip

Page 26: PYTHON PACKAGING (PyFes 2012.03 発表資料)

pysetupの使い方:PyPIインストール

従来のインストール

Python標準ではPyPIインストール出来ないpip install blockdiag

新しい方法

pysetup install blockdiag

Page 27: PYTHON PACKAGING (PyFes 2012.03 発表資料)

pysetupの使い方:URLインストール

従来のインストール

Python標準ではURLインストール出来ないpip install http://......../bucho-0.1.1.tgz

新しい方法

pysetup install http://......../bucho-0.1.1.tgz

Page 28: PYTHON PACKAGING (PyFes 2012.03 発表資料)

pysetupの使い方:アンインストール

従来のアンインストール

Python標準ではアンインストールは手動pip uninstall blockdiag

新しい方法

pysetup remove blockdiag

Page 29: PYTHON PACKAGING (PyFes 2012.03 発表資料)

pysetupの使い方:PyPI検索

従来のPyPI検索

Python標準ではPyPI検索とか無いpip search bucho

新しい方法

pysetup search bucho

Page 30: PYTHON PACKAGING (PyFes 2012.03 発表資料)

pysetupの使い方:インストール一覧

従来の一覧取得

site-packagesやeasy_install.pthを見るpip freeze

新しい方法

pysetup list

Page 31: PYTHON PACKAGING (PyFes 2012.03 発表資料)

pysetupの使い方:メタデータ参照

従来のメタデータ参照

Python標準ではメタデータを持っていない

easy_install/pipならPKG-INFOファイルを見る

新しい方法

pysetup metadata bucho -f name -f version

Page 32: PYTHON PACKAGING (PyFes 2012.03 発表資料)

pysetupの使い方:Graph

従来には無いコマンド

Python標準, easy_install, pip には無い

にゅーふぇーす : graph

pysetup graph blockdiag

Page 33: PYTHON PACKAGING (PyFes 2012.03 発表資料)

今日のレシピ

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

Page 34: PYTHON PACKAGING (PyFes 2012.03 発表資料)

パッケージの作り方

ドキュメントを読んでいると以下のように書いてある

3.2. A Simple Examplefrom packaging.core import setupsetup(name='foo', version='1.0', py_modules=['foo'])

Page 35: PYTHON PACKAGING (PyFes 2012.03 発表資料)

パッケージの作り方

頭から読めば丁寧に書いてあった 1. Packaging tutorial

$ pysetup create対話形式でsetup.cfg作れる

Page 36: PYTHON PACKAGING (PyFes 2012.03 発表資料)

パッケージの作り方

既存の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".

 

Page 37: PYTHON PACKAGING (PyFes 2012.03 発表資料)

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

Page 38: PYTHON PACKAGING (PyFes 2012.03 発表資料)

後方互換パッケージの作り方

古い環境のためにsetup.pyが必要なんだけど...

setup.cfgのあるディレクトリで

$ pysetup generate-setupThe setup.py was generated

Page 39: PYTHON PACKAGING (PyFes 2012.03 発表資料)

今日のレシピ

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

Page 40: PYTHON PACKAGING (PyFes 2012.03 発表資料)

課題

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

のpackagingのドキュメントを読もう

2. Windowsで動かない機能が多い○ みんなでデバッグしよう!

3. d2/p にはeggサポートが無い

○ MLで*.pbdサポートが議論されている

4. pluginの仕組みが無い

○ setuptoolsのentry_points相当の機能が無い

Page 41: PYTHON PACKAGING (PyFes 2012.03 発表資料)

課題

ドキュメントが古い

○ packagingのドキュメントが古くて試すのが大変from packaging.core import setup とか存在しない

5. "import distutils2" vs "import packaging"

○ Python 3.3 以前と以降で名前が違う

try: import packagingexcept ImportError: import distutils2 as packaging

Page 42: PYTHON PACKAGING (PyFes 2012.03 発表資料)

課題

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

8. virtualenvとか未対応?

○ virtualenv環境下でpysetup install

Unable to write in "/usr/lib/python2.7/site-packages". Do you have the permissions ?

Page 43: PYTHON PACKAGING (PyFes 2012.03 発表資料)

まとめ

期待の新星 Distutils2/packaging 運用コストはもしかしたら半分に減るかもしれない でもまだまだ実装やドキュメントが追いついてない みんなで叩いて良くしていこう!

Page 44: PYTHON PACKAGING (PyFes 2012.03 発表資料)

PyConJP 2012 スタッフ募集

Page 45: PYTHON PACKAGING (PyFes 2012.03 発表資料)

● 2940円● 430ページ● 3/27(火)● 秀和システム

BP本

Page 46: PYTHON PACKAGING (PyFes 2012.03 発表資料)

Terima kasih【尼】ありがとう