Submit Search
パッケージングの今と未来
•
18 likes
•
12,255 views
Atsushi Odagiri
Follow
1 of 49
Download now
Downloaded 23 times
More Related Content
パッケージングの今と未来
1.
パッケージングの 今と未来 aodag - Atsushi
Odagiri PyCon APAC 2013
2.
お前誰よ aodag 小田切篤 Atsushi
Odagiri Be Proud, Inc. pylonsproject.jp Pythonは10年ほど使わせていただいております
3.
Agenda パッケージングの基礎知識 パッケージングの今 パッケージングの未来 まとめ
4.
パッケージングの基礎知識 なぜパッケージングするのか? Pythonでのパッケージング
5.
なぜパッケージングするのか? ● 作ったものを誰かに使ってもらう ● 誰かが作ったものを使う
6.
素朴な方法 hello.pyを渡して python hello.py
7.
distutils setup.pyにパッケージ情報を書く python setup.py sdist
でソースパッケージ作成 python setup.py install でパッケージインストール
8.
パッケージングの今 Pypaツール群 setuptoolsベースのパッケージング Pythonパッケージ開発の流れ
9.
Pypa Python Packaging
Authority パッケージング関連の重要なツールをメンテナンス する非公式なグループ なぜかリポジトリがgithubとbitbucketにわかれてい る github pip virtualenv bitbucket setuptools pypi distlib
10.
モダンなPythonの環境作り Pypaツール群 ● virtualenv ● setuptools ●
pip virtualenvは環境作成時にsetuptools,pipがそ ろった環境にしてくれる
11.
pip パッケージインストーラー sdistしか扱えない(状態が続いていた) さまざまなロケーションからインストール pip install パッケージ名 pip
install パッケージURL pip install vcs{git,hg..}+リポジトリURL@チェンジ セット
12.
pip requirements.txtにパッケージを全部指定 pip install -r
requrements.txt パッケージを削除 pip uninstall spam
13.
pip easy_installとは なんだったのか?
14.
setuptools/distribute setup.pyを強化 配布するまでのコマンド setup.py test setup.py register setup.py
sdist bdist_egg upload setup.py upload_docs
15.
setuptools/distribute pkg_resources ● パッケージのメタデータを利用するためのライブ ラリ ● パッケージに含まれるメディアデータの取得など ●
entry_point(後述)のローディングなども行える
16.
setuptools/distribute setuptoolsとdistributeの関係 setuptoolsがあまり更新などしない distributeがフォーク distributeがpy3対応などいろいろ 2013 PyCon USでマージ宣言
Pypaがメンテする distributeコードベースでsetuptools-0.7など setuptools-0.8,0.9,0.9.1...0.9.8,1.0,1.1,1.1.5
17.
setuptools distributeのことは 忘れてあげてください
18.
setuptools マージ後のsetuptoolsは バージョンあげすぎです><
19.
setuptools/distribute packages=find_packages() packagesに自分でパッケージを羅列しなくてもよい install_requires, tests_require, extras_require, setup_require ライブラリの依存性を指定
20.
setuptools/distribute entry_point プラグインの仕組み CUIコマンドを作る例 entry_point={ “console_scripts”: [ “hello=hello:greeting”, ], }
21.
entry_point活用例 PasteDeploy nose cliff setuptoolsのサブコマンド
22.
egg バイナリパッケージ C拡張などのコンパイル済ライブラリなどを含める ソースとメタデータをzipアーカイブしたもの PIPでは扱えない
23.
egg-info pyramid-1.5a1-py33.egg-infoの例 ● PKG-INFO ● SOURCES.txt ●
dependency_links.txt ● entry_points.txt ● not-zip-safe ● requires.txt ● top_level.txt
24.
PyPI パッケージを登録して配布するサイト pipやeasy_installはデフォルトで、PyPIにパッケー ジを探しに行く
25.
pip,setuptools,virtualenvでの開発 仮想環境作成と利用 mkdir yourproject cd yourproject virtualenv
env . env/bin/activate or env/scripts/activate.ps1
26.
pip,setuptools,virtualenvでの開発 プロジェクトのディレクトリ構成 yourproject/ ┣ env/ ┣ setup.py ┣
setup.cfg ┣ docs/ ┗yourproject/__init__.py ┗main.py
27.
最小限のsetup.py from setuptools import
setup, find_packages setup(name=”yourproject”, packages=find_packages(), )
28.
実用的なsetup.py from setuptools import
setup, find_packages setup(name=”yourproject”, packages=find_packages(), install_requires=[“webob”], tests_require=[“testfixtures”], test_suite=”yourproject”, )
29.
pip,setuptools,virtualenvでの開発 開発対象のegg登録と依存ライブラリインストール (Editable Install) pip install
-e .
30.
pip,setuptools,virtualenvでの開発 テストから、PyPIへのアップロード、PythonHosted へのドキュメントアップロード python setup.py test python
setup.py egg_info python setup.py check python setup.py register python setup.py sdist bdist_egg upload python setup.py build_sphinx python setup.py upload_docs
31.
extras_requireを活用する setup( … extras_require={ “testing”: tests_require, “docs”: docs_require, “dev”:
tests_require + docs_require, } )
32.
extras_requireを活用する extrasを指定してEditable Install pip install
-e .[dev]
33.
setup.cfg devパッケージ [egg_info] tag-build = dev sdistやbdist_eggなどで生成されるパッケージの バージョンの後にdevが付加される
34.
setup.cfg コマンドのオプションを指定 [upload_docs] upload_dir = docs/build/html python
setup.py upload_docs で自動でオプショ ン追加
35.
setup.cfg コマンドを追加(alias) [aliases] release = egg_info
-RDb '' source = register sdist binary binary = bdist_egg upload --show-response python setup.py release source
36.
パッケージングの未来 関連PEP wheel distlib Metadata 2.0
37.
pip インストーラー easy_installsetup.py install distutils パッケージャー setuptools/distribute パッケージフォーマット sdist egg Metadata1.0 wheel Metadata2.0 ? pkg_resources(setuptools) ユーティリティモジュール distlib 今 未来
38.
関連PEP PEP 345 --
Metadata 1.2 PEP 376 -- Database PEP 386 -- Version PEP 420 -- Namespace Package PEP 426 -- Metadata 2.0 PEP 427 -- Wheel PEP 440 -- Version PEP 453 -- Bundle PIP Installer
39.
Wheel ● バイナリパッケージフォーマット ● Metadata
2.0を含むzip ● 電子署名可能 ● bdist_wheelやegg2wheel, distlib.wheelなど で作成 ● C拡張などを含まない場合はpy2,py3両用のユ ニバーサル構成可能 ● 既にpipもサポート開始 ● PyPIは?
40.
distlib ● 関連PEPの実装ライブラリ ● PyPIへのアクセスAPI ●
パッケージ同梱のメディアファイルへのアクセス ● Scriptsのインストール ● 機能検証用にdistilというコマンドがある
41.
Metadata 2.0 pydist.json ●
egg-infoでばらばらだった項目(requires, entry_point)とMetadata1.0(PKG-INFO)を統合 ● josnフォーマット ● wheelの dist-info に配置する
42.
pkg_resourcesからdistlibへ ● だいたい同じことができる ● entry_pointとexportsで非互換性がある
43.
setuptoolsのwheel対応 setuptools自体はdistlibもwheelも対応していない wheelをインストールすると、setupにbdist_wheel コマンドが追加される
44.
pipのwheel対応 ● distlibを同梱して、wheelパッケージをインス トール可能 ● sdistに対してbdist_wheelする実装が既に取り 込まれている(インストールはしない) ●
直接sdistをインストールする場合は bdist_egg が実行される
45.
Wheelをどう使うか? 例:Webアプリケーションのデプロイ アプリサーバーにgccがない!Pillowをどうインス トールするか? wheelで作成してアプリケーションサーバーに配布 する。 pipでwheelをインストール(pipはeggパッケージを 取り扱えない)
46.
開発マシン パッケージサーバー ステージングサーバー プロダクションサーバー リポジトリ CIサーバー ソースコード sdist wheel requirements.txt wheel
47.
議論中の話題 ● sdistをインストールする際に、setup.py bdist_eggは必須か? ● パッケージャーがwheelを作成するのをサポート するツールは? ○
bdist_wheelはsetuptoolsとwheelが必要 ○ sdist.wheelはpydist.jsonを自分で書く ○ bentoは独自形式のmetadataファイルから変換する ● 各Linuxディストリビューションの反応、作業はど のようになるか?
48.
まとめ ● 今はsetuptoolsの使い方とsetup.pyの書き方を ちゃんと覚えよう ● pipはがんばってpepに追従しているので今後も 安泰に見える ●
setuptoolsはいい加減にしてほしい ● wheelはデプロイで活用できるかも
49.
参考文献 ● Distributing Python
Modules ● Python Packaging User Guide ● Wheel ● distlib ● setuptools ● pip ● Bento ● pypa bitbucket ● pypa github
Download