パッケージングの今と未来
-
Upload
atsushi-odagiri -
Category
Documents
-
view
4.758 -
download
3
Transcript of パッケージングの今と未来
お前だれよ?
aodag = Atsushi ODAGiri
株式会社ビープラウド勤務
Pylonsproject.jp
Pythonサポーターズ
PyCon APAC 2013 パトロン
お前だれよ?(cont)
python1.5から!
文字列処理とか秘密の道具
Zope, TurboGears, Pylons/Paste/WSGI, Repoze, Pyramid!Django?なにそれ?
PythonのWebフレームワークってどのくらいZopeにするかってことだよね?
what's setup.py?
配布物を作る、PYPIに登録やアップロードする、配布物をインストールする
$ python setup.py test build sdist register upload
$ python setup.py install
what's setup.py? (cont)
標準ライブラリ distutilsdistutils.core.setup
拡張 setuptools/distributesetuptools.setup
仮想環境の今の使い方
● virtualenvで仮想環境作成○ virtualenvwrapperはそこそこ便利
● pipでパッケージインストール
$ mkvirtualenv some-project(some-project) $ pip install pyramid(some-project) $ pip freeze
helloコマンドの作成とパッケージング
$ mkvirtualenv hello(hello) $ pip install pastescript(hello) $ paster create hello(hello) $ cd hello(hello) $ pip freeze(hello) $ pip install -e .hello-0.0dev
メタデータ
(hello) $ python setup.py egg_info(hello) $ cat hello.egg-info/PKG-INFO(hello) $ cat hello.egg-info/entry_points.txt
公開(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
リリース
$ hg commit$ hg tag hello-0.1 # egg name$ hg push --new-branch
https://bitbucket.org/aodag/python-hello/get/hello-0.1.zip
インストールしてみよう
$ mkvirtualenv hello2(hello2) $ pip install https://bitbucket.org/aodag/python-hello/get/hello-0.1.zip(hello2) $ pip freeze
パッケージングの未来
現在の問題点● eggは標準じゃない● eggはpure pythonのパッケージでもプラット
フォーム、pythonバージョンごとに作成● setup.py には実際のところなんでも書けてしま
う● Linuxディストリビューションなどのパッケージ管
理と競合する
packaging
python3.3に入る予定だった
setuptoolsなどの成果を標準化することが期待されていた
entry_pointやscriptsなどの拡張性について議論しきれてなかった実装もなかなか進まなかった
python3.3からdrop
パッケージインストールデータベース
PEP376
配布物に含まれるファイルを追記どのインストーラ(pipやdpkg,rpmなど)がインストールしたのか?ユーザーが指定したのか、依存関係の結果インストールされたのか?
などを記録
setuptoolsとdistributeが合流
setuptoolsがあまりにも更新やバグフィックスが遅いdistributeにフォーク
distributeで2to3やpython3対応などが進む
setuptools0.7でdistributeが合流、成果をマージ
distribute0.7はsetuptools0.7以降へのアップグレード用
現在の状況
pippip1.4でwheelに対応
setuptoolssetuptools0.8で2to3を必要としなくなった -> wheelにできるようになる
virtualenvsetuptools0.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://bitbucket.org/pypa/setuptools/downloads/ez_setup.py(hello33) $ wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
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
準備完了
wheeling!
C拡張あり
$ pip wheel Pillow$ ls wheelhousePillow-2.1.0-cp33-cp33m-linux_x86_64.whl
C拡張なし
$ pip wheel webob$ ls wheelhouseWebOb-1.2.3-py33-none-any.whl
use it!
インストールして使う$ pip install wheelhouse/WebOb-1.2.3-py33-none-any.whl
マウントして使うimport distlib.wheeldistlib.wheel.Wheel('wheelhouse/Pillow-2.1.0-cp33-cp33m-linux_x86_64.whl')import PIL
心配事について
ツールは変わる?pipは続投されるはず
setuptoolsは一部の機能をdistlibに任せるようになるはず
パッケージング方法は変わる?bdist_wheelがメタデータ2.0をサポートすれば、現在のsetup.py方式のままいけるはず