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.
パッケージングの今と未来
aodag
お前だれよ?
aodag = Atsushi ODAGiri
株式会社ビープラウド勤務
Pylonsproject.jp
Pythonサポーターズ
PyCon APAC 2013 パトロン
お前だれよ?(cont)
python1.5から!
文字列処理とか秘密の道具
Zope, TurboGears, Pylons/Paste/WSGI,
Repoze, Pyramid!
Django?なにそれ?
PythonのWebフレームワー...
あじぇんだ
● パッケージングの今
● パッケージングの未来
● Python3.4に期待されること
ヽ(´_・ω・)_
こわくないよ
現在のツール
● distribute
○ setup.py
○ pkg_resources
○ egg
● virtualenv
● pip
what's setup.py?
配布物を作る、PYPIに登録やアップロードする、配
布物をインストールする
$ python setup.py test build sdist register
upload
$ python setup.p...
what's setup.py? (cont)
標準ライブラリ distutils
distutils.core.setup
拡張 setuptools/distribute
setuptools.setup
パッケージメタデータ 1.0
setup関数で作成
パッケージ名
バージョン
作成者、メンテナ
など
基本的な情報
egg-info
依存ライブラリ
プラグインのエントリポイントなど
拡張されたメタデータ
仮想環境の今の使い方
● virtualenvで仮想環境作成
○ virtualenvwrapperはそこそこ便利
● pipでパッケージインストール
$ mkvirtualenv some-project
(some-project) $ p...
helloコマンドの作成とパッケージング
$ mkvirtualenv hello
(hello) $ pip install pastescript
(hello) $ paster create hello
(hello) $ cd hel...
hello/__init__.py
def hello():
print "Hello, world!"
hello/__main__.py
from . import hello
if __name__ == '__main__':
hello()
(hello) $ python -m hello
Hello, world!
メタデータ
(hello) $ python setup.py egg_info
(hello) $ cat hello.egg-info/PKG-INFO
(hello) $ cat hello.egg-info/entry_points.t...
console_scripts
setup.py
entry_points="""
[console_scripts]
hello=hello:hello
"""
(hello) $ pip install -e .
(hello) $ hello
Hello, world!
パッケージング
(hello) $ python setup.py sdist
(hello) $ ls dist
hello-0.0dev.tar.gz
公開(without PyPI)
bitbucketなど用意
例えば https://bitbucket.org/aodag/python-hello
$ hg init
$ hg add setup.py setup.cfg hello/__...
リリース
リリースブランチ
$ hg branch rel-0.1
setup.cfg
;tag_build = dev ; コメントアウト
setup.py
version = "0.1"
リリース
$ hg commit
$ hg tag hello-0.1 # egg name
$ hg push --new-branch
https://bitbucket.org/aodag/python-
hello/get/hello-...
インストールしてみよう
$ mkvirtualenv hello2
(hello2) $ pip install https://bitbucket.
org/aodag/python-hello/get/hello-0.1.zip
(hell...
パッケージングの未来
現在の問題点
● eggは標準じゃない
● eggはpure pythonのパッケージでもプラット
フォーム、pythonバージョンごとに作成
● setup.py には実際のところなんでも書けてしま
う
● Linuxデ...
packaging
python3.3に入る予定だった
setuptoolsなどの成果を標準化することが期待さ
れていた
entry_pointやscriptsなどの拡張性について議論し
きれてなかった
実装もなかなか進まなかった
python...
パッケージインストールデータベース
PEP376
配布物に含まれるファイルを追記
どのインストーラ(pipやdpkg,rpmなど)がインストー
ルしたのか?
ユーザーが指定したのか、依存関係の結果インス
トールされたのか?
などを記録
wheelパッケージコンテナ PEP427
eggから発展
パッケージインストールデータベースに対応
より柔軟なプラットフォーム対応
きちんとPEPで議論済
メタデータ2.0 PEP426
egg-infoなどから、追加項目
依存ライブラリや提供パッケージなど。
setuptoolsとdistributeが合流
setuptoolsがあまりにも更新やバグフィックスが遅
い
distributeにフォーク
distributeで2to3やpython3対応などが進む
setuptools0.7でdistr...
pypa
setuptools, pip, virtualenvなどの実装、メンテナン
スをするグループ
http://github.com/pypa
http://bitbucket.org/pypa
distlib/distil
distlib
パッケージング関連のPEPを実装
distil
distlibの機能をpipにマージするための実験的実
装
distlibのサポートPEP
database PEP376
metadata 2.0, 1.2, 1.1 PEP345,314,241
version PEP386,426
Wheel PEP427
現在の状況
pip
pip1.4でwheelに対応
setuptools
setuptools0.8で2to3を必要としなくなった ->
wheelにできるようになる
virtualenv
setuptools0.7以降に対応
残る問題
メタデータ2.0
distlibはメタデータ2.0をサポートしているが
pypackage.jsonを書かないといけない
bdist_wheelはsetup.pyからメタデータを生成する
が、対応しているのはメタデータ1.0
pyvenv
virtualenvの機能をPython標準にとりこみ
Python3.3以降で利用可能
virtualenvが標準ライブラリをコピーするのに対し
て、pyvenvはsite.pyの入れ替えのみで対応
未来を感じてみよう
Python3.3は入ってますよね?
$ mkdir hello33; cd hello33
$ pyvenv env
$ . env/bin/activate
(hello33) $ wget https://bitbuc...
Don't think FEEL
$ pip install -U setuptools==0.8
$ pip install -U https://github.
com/pypa/pip/archive/1.4rc2.tar.gz
$ pi...
wheeling!
C拡張あり
$ pip wheel Pillow
$ ls wheelhouse
Pillow-2.1.0-cp33-cp33m-linux_x86_64.whl
C拡張なし
$ pip wheel webob
$ ls w...
use it!
インストールして使う
$ pip install wheelhouse/WebOb-1.2.3-py33-
none-any.whl
マウントして使う
import distlib.wheel
distlib.wheel.Whe...
Python3.4に期待すること
pipをインストールするスクリプトをバンドル
distlibを標準ライブラリにとりこみ
心配事について
ツールは変わる?
pipは続投されるはず
setuptoolsは一部の機能をdistlibに任せるように
なるはず
パッケージング方法は変わる?
bdist_wheelがメタデータ2.0をサポートすれば、現
在のsetup.py...
まとめ
パッケージングの情報は分散していてわかりにくい
今後のパッケージング方法はPython3主体
Python2の間はsetuptoolsがわかればOK
公開しない場合でもsetup.py書こう
Upcoming SlideShare
Loading in …5
×

パッケージングの今と未来

5,933 views

Published on

  • Be the first to comment

パッケージングの今と未来

  1. 1. パッケージングの今と未来 aodag
  2. 2. お前だれよ? aodag = Atsushi ODAGiri 株式会社ビープラウド勤務 Pylonsproject.jp Pythonサポーターズ PyCon APAC 2013 パトロン
  3. 3. お前だれよ?(cont) python1.5から! 文字列処理とか秘密の道具 Zope, TurboGears, Pylons/Paste/WSGI, Repoze, Pyramid! Django?なにそれ? PythonのWebフレームワークってどのくらいZope にするかってことだよね?
  4. 4. あじぇんだ ● パッケージングの今 ● パッケージングの未来 ● Python3.4に期待されること
  5. 5. ヽ(´_・ω・)_ こわくないよ
  6. 6. 現在のツール ● distribute ○ setup.py ○ pkg_resources ○ egg ● virtualenv ● pip
  7. 7. what's setup.py? 配布物を作る、PYPIに登録やアップロードする、配 布物をインストールする $ python setup.py test build sdist register upload $ python setup.py install
  8. 8. what's setup.py? (cont) 標準ライブラリ distutils distutils.core.setup 拡張 setuptools/distribute setuptools.setup
  9. 9. パッケージメタデータ 1.0 setup関数で作成 パッケージ名 バージョン 作成者、メンテナ など 基本的な情報
  10. 10. egg-info 依存ライブラリ プラグインのエントリポイントなど 拡張されたメタデータ
  11. 11. 仮想環境の今の使い方 ● virtualenvで仮想環境作成 ○ virtualenvwrapperはそこそこ便利 ● pipでパッケージインストール $ mkvirtualenv some-project (some-project) $ pip install pyramid (some-project) $ pip freeze
  12. 12. helloコマンドの作成とパッケージング $ mkvirtualenv hello (hello) $ pip install pastescript (hello) $ paster create hello (hello) $ cd hello (hello) $ pip freeze (hello) $ pip install -e . hello-0.0dev
  13. 13. hello/__init__.py def hello(): print "Hello, world!"
  14. 14. hello/__main__.py from . import hello if __name__ == '__main__': hello()
  15. 15. (hello) $ python -m hello Hello, world!
  16. 16. メタデータ (hello) $ python setup.py egg_info (hello) $ cat hello.egg-info/PKG-INFO (hello) $ cat hello.egg-info/entry_points.txt
  17. 17. console_scripts setup.py entry_points=""" [console_scripts] hello=hello:hello """
  18. 18. (hello) $ pip install -e . (hello) $ hello Hello, world!
  19. 19. パッケージング (hello) $ python setup.py sdist (hello) $ ls dist hello-0.0dev.tar.gz
  20. 20. 公開(without PyPI) bitbucketなど用意 例えば https://bitbucket.org/aodag/python-hello $ hg init $ hg add setup.py setup.cfg hello/__init__.py hello/__main__.py $ hg commit $ hg push
  21. 21. リリース リリースブランチ $ hg branch rel-0.1 setup.cfg ;tag_build = dev ; コメントアウト setup.py version = "0.1"
  22. 22. リリース $ hg commit $ hg tag hello-0.1 # egg name $ hg push --new-branch https://bitbucket.org/aodag/python- hello/get/hello-0.1.zip
  23. 23. インストールしてみよう $ mkvirtualenv hello2 (hello2) $ pip install https://bitbucket. org/aodag/python-hello/get/hello-0.1.zip (hello2) $ pip freeze
  24. 24. パッケージングの未来 現在の問題点 ● eggは標準じゃない ● eggはpure pythonのパッケージでもプラット フォーム、pythonバージョンごとに作成 ● setup.py には実際のところなんでも書けてしま う ● Linuxディストリビューションなどのパッケージ管 理と競合する
  25. 25. packaging python3.3に入る予定だった setuptoolsなどの成果を標準化することが期待さ れていた entry_pointやscriptsなどの拡張性について議論し きれてなかった 実装もなかなか進まなかった python3.3からdrop
  26. 26. パッケージインストールデータベース PEP376 配布物に含まれるファイルを追記 どのインストーラ(pipやdpkg,rpmなど)がインストー ルしたのか? ユーザーが指定したのか、依存関係の結果インス トールされたのか? などを記録
  27. 27. wheelパッケージコンテナ PEP427 eggから発展 パッケージインストールデータベースに対応 より柔軟なプラットフォーム対応 きちんとPEPで議論済
  28. 28. メタデータ2.0 PEP426 egg-infoなどから、追加項目 依存ライブラリや提供パッケージなど。
  29. 29. setuptoolsとdistributeが合流 setuptoolsがあまりにも更新やバグフィックスが遅 い distributeにフォーク distributeで2to3やpython3対応などが進む setuptools0.7でdistributeが合流、成果をマージ distribute0.7はsetuptools0.7以降へのアップグ レード用
  30. 30. pypa setuptools, pip, virtualenvなどの実装、メンテナン スをするグループ http://github.com/pypa http://bitbucket.org/pypa
  31. 31. distlib/distil distlib パッケージング関連のPEPを実装 distil distlibの機能をpipにマージするための実験的実 装
  32. 32. distlibのサポートPEP database PEP376 metadata 2.0, 1.2, 1.1 PEP345,314,241 version PEP386,426 Wheel PEP427
  33. 33. 現在の状況 pip pip1.4でwheelに対応 setuptools setuptools0.8で2to3を必要としなくなった -> wheelにできるようになる virtualenv setuptools0.7以降に対応
  34. 34. 残る問題 メタデータ2.0 distlibはメタデータ2.0をサポートしているが pypackage.jsonを書かないといけない bdist_wheelはsetup.pyからメタデータを生成する が、対応しているのはメタデータ1.0
  35. 35. pyvenv virtualenvの機能をPython標準にとりこみ Python3.3以降で利用可能 virtualenvが標準ライブラリをコピーするのに対し て、pyvenvはsite.pyの入れ替えのみで対応
  36. 36. 未来を感じてみよう Python3.3は入ってますよね? $ mkdir hello33; cd hello33 $ pyvenv env $ . env/bin/activate (hello33) $ wget https://bitbucket. org/pypa/setuptools/downloads/ez_setup.py (hello33) $ wget https://raw.github. com/pypa/pip/master/contrib/get-pip.py
  37. 37. Don't think FEEL $ pip install -U setuptools==0.8 $ pip install -U https://github. com/pypa/pip/archive/1.4rc2.tar.gz $ pip install wheel 準備完了
  38. 38. wheeling! C拡張あり $ pip wheel Pillow $ ls wheelhouse Pillow-2.1.0-cp33-cp33m-linux_x86_64.whl C拡張なし $ pip wheel webob $ ls wheelhouse WebOb-1.2.3-py33-none-any.whl
  39. 39. use it! インストールして使う $ pip install wheelhouse/WebOb-1.2.3-py33- none-any.whl マウントして使う import distlib.wheel distlib.wheel.Wheel('wheelhouse/Pillow-2.1.0- cp33-cp33m-linux_x86_64.whl') import PIL
  40. 40. Python3.4に期待すること pipをインストールするスクリプトをバンドル distlibを標準ライブラリにとりこみ
  41. 41. 心配事について ツールは変わる? pipは続投されるはず setuptoolsは一部の機能をdistlibに任せるように なるはず パッケージング方法は変わる? bdist_wheelがメタデータ2.0をサポートすれば、現 在のsetup.py方式のままいけるはず
  42. 42. まとめ パッケージングの情報は分散していてわかりにくい 今後のパッケージング方法はPython3主体 Python2の間はsetuptoolsがわかればOK 公開しない場合でもsetup.py書こう

×