PYTHON PACKAGING (PyFes 2012.03 発表資料)

Takayuki Shimizukawa
Takayuki ShimizukawaWeb Developer at BePROUD Inc.
運用コストが半分になった!
Pythonパッケージの極意
そんなウマい話は無ぇ!
PYTHON PACKAGING
    Python2/3対応
おまえ誰よ

清水川 貴之 (@shimizukawa)

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

● 書籍
  ○ 2010「エキスパートPythonプログラミング」
  ○ 2012「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によるソースコード管理
第9章:Jenkinsで継続的インテグレーション
第3部:サービス公開

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

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

第13章:テストを味方にする
第14章:Djangoを便利に使う
第15章:便利なPythonモジュールを使おう
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
                           利用




 distutils    distutils
現在と未来

  過去                      現在                             未来

setuptools   Distribute                                     pip
                                               delete
                          機
                           能
                               を
                                取
                                    り                         利用
                                     込
                                        み




 distutils    distutils                     distutils2   packaging
新しいライブラリ 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-format
N.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 / 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 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 / packaging
3.   pysetupの使い方
4.   パッケージの作り方
5.   次の課題
パッケージの作り方

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

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

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

既存の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".
                     
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
後方互換パッケージの作り方

古い環境のために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で動かない機能が多い
  ○ みんなでデバッグしよう!


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 packaging
      except 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 スタッフ募集
BP本
●   2940円
●   430ページ
●   3/27(火)
●   秀和システム
Terima kasih
  【尼】ありがとう
1 of 46

More Related Content

Similar to PYTHON PACKAGING (PyFes 2012.03 発表資料)(20)

Distutil setuptools distributeDistutil setuptools distribute
Distutil setuptools distribute
Atsushi Odagiri1.9K views
20170131 python3 6 PEP526 20170131 python3 6 PEP526
20170131 python3 6 PEP526
masahitojp3.3K views
210728 mpy210728 mpy
210728 mpy
Takuya Nishimoto313 views
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践
Kazuto Kusama7.6K views
無印Pentium debian install memo無印Pentium debian install memo
無印Pentium debian install memo
Yukiyoshi Yoshimoto983 views
BPStudy#54 そろそろPython3BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3
Atsushi Odagiri3.7K views

More from Takayuki Shimizukawa(20)

IKEv2-VPN PyHackCon2023IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023
Takayuki Shimizukawa19 views
独学プログラマーのその後独学プログラマーのその後
独学プログラマーのその後
Takayuki Shimizukawa839 views
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa11.2K views
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い
Takayuki Shimizukawa8.6K views
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015
Takayuki Shimizukawa3.4K views

PYTHON PACKAGING (PyFes 2012.03 発表資料)