6. PyPI
I cheeseshop
I warehouse
I https://warehouse.python.org/
I https://warehouse.python.org/project/WebDispatch/
I https://warehouse.python.org/user/aodag/
7. PIP
I “–pre” オプション
I デフォルトではプリバージョン(a やb などついてるバー
ジョン) のものはインストール対象外
I “–allow-external” “–allow-unverified” オプション
I インデックスサーバー(PyPI) にホスティングされていない
ファイルのインストールが厳しくなった
I wheel サポート
I wheel 形式のパッケージをインストールできる
I pip, setuptools 自体もwheel 形式で配布
I get-pip.py
I setuptools, pip をインストールするもの
I さよならez_setup.py!
8. ensure pip
I PEP 453 Explicit bootstrapping of pip in Python installations
I Python3.4 以降ではインストール直後からpip を利用可能
I get-pip.py もいらない
I PEP 477 Backport ensurepip (PEP 453) to Python 2.7
I Python2.7 でもインストール直後にpip を使えるようにしよう
I Status:Accepted
I 今後に期待
9. PIP でパッケージをインストール
I PyPI からインストール
pip install pyramid
I ローカルサーバーからインストール
pip install pyramid -f http://localhost:5000
I requirements ファイルでインストール
"export code"body
$ pip install -r requirements.txt
16. setup.py, setuptools
I setuptools
I 今のところパッケージングするための必須ツール
I get-pip.py でpip のついでにインストールされる
I setup.py
I パッケージのメタデータなどを記述する
I 内部ではsetuptools やdistutils などのsetup 関数を呼ぶだけ
20. パッケージの公開方法
I pypi
python setup.py register
python setup.py sdist bdist_wheel upload
I setuptools の機能でアップロードする
I setuptools なしでもアップロードできるようにtwine という
コマンドが開発されている
I github,bitbucket
git tag v0.0
git push --tags
pip install -f
https://github.com/aodag/aodag.hello/archive/v0.0.zip
I タグをつけてリリースURL からインストール
I ローカルPyPI
I devpi などを立ててそこに公開
21. devpi
I 機能
I ローカルに立てられるパッケージインデックスサーバー
I PyPI へのプロキシとキャッシュ
I devpi へのアップロード
I プロジェクトごとの名前空間
I インストール
pip install devpi
22. devpi をプロキシとして使う
I devpi-server
devpi-server --start
I index-server にdevpi を使う
pip install
-i http://localhost:3141/root/pypi/+simple/
WebDispatch
23. devpi にアップロードするための準備
I ユーザーを作成
$ devpi user -c aodag password=
user created: aodag
$ devpi login aodag --password=
logged in 'aodag', credentials valid for 10.00 hours
I プロジェクト用のインデックスを作る
$ devpi index -c aodag.hello
http://localhost:3141/aodag/aodag.hello:
type=stage
bases=root/pypi
volatile=True
uploadtrigger_jenkins=None
acl_upload=aodag
pypi_whitelist=
24. devpi にアップロード
devpi use aodag.hello
devpi upload --formats "sdist,bdist_wheel"
I devpi use でインデックスサーバーを指定
I devpi upload でアップロード
I “–formats” オプションでアップロードするパッケージフォー
マットを指定
25. devpi のプロジェクト用インデックスサーバーからイン
ストール
$ pip install -i http://localhost:3141/aodag/aodag.hello/+simplee/ Downloading/unpacking aodag.hello
http://localhost:3141/aodag/aodag.hello/+simple/aodag.hello/ https if localhost:3141 has it available
Downloading aodag.hello-0.0-py2.py3-none-any.whl
Installing collected packages: aodag.hello
Successfully installed aodag.hello
Cleaning up...
26. devpi 用のrequirements.txt を作る
I requirements.txt に依存パッケージを書く
I dev-requirements.txt でインデックスサーバーを指定して、
requirements.txt を参照する
I requirements.txt
aodag.hello==0.0
I dev-requirements.txt
-i http://localhost:3141/aodag/aodag.hello/+simple
-r requirements.txt
27. CI やデプロイに活用する
I CI のおともに
I travis-ci などでテストするときに毎回依存ライブラリのダウ
ンロードするのは効率が悪い
I pip wheel しておいてwheelhouse まるごとVCS に入れてしま
う(ベンダリング)
I デプロイするときに
I devpi サーバーなどをLAN にたてておけば不意のPyPI サー
バーダウンでもなんとかなるかもしれない(キャッシュされ
てないものは無理)
I wheel をベンダリングして丸ごとデプロイしてしまうのが安
全だし早い
28. CI で使うrequirements.txt
I requirements.txt に依存ライブラリを書く
I tests-require.txt にテストのときだけ必要な依存ライブラリを
書く
I dev-requires.txt にインデックスサーバーオプションなどを
書く
I tox などで依存先に“-rdev-requires.txt” などを指定する
-f wheelhouse
--no-index
-r requirements.txt
-r tests-requires.txt
29. devpi かwheel をベンダリングするか
I ベンダリングすると依存ライブラリの取得にネットワークを
必要としない
I テストで利用したのと同じライブラリであることが保証さ
れる
I wheel フォーマットでPyPI に登録されていないものでも、
pip wheel コマンドでwheel 化したものを使える
I devpi でもwheel 化したものをプロジェクト用にアップロー
ドしておけばよい
I devpi では独自パッチをあてたサードパーティ製ライブラリ
をindex-server で入れ替えておけるのでrequirements.txt で
個別のURL を指定しなくてもよい
30. まとめ
I パッケージを使う
I pip が細かく進化している
I パッケージを作る
I まだまだsetuptools が現役
I パッケージを活用する
I wheel をうまく利用すると、CI やデプロイを効率化できる
かも
31. 参考
I Python Packaging User Guide
I https://packaging.python.org/en/latest/
I PEP 453 – Explicit bootstrapping of pip in Python
installations
I http://legacy.python.org/dev/peps/pep-0453/
I PEP 427 – The Wheel Binary Package Format 1.0
I http://legacy.python.org/dev/peps/pep-0427/
I devpi: PyPI server and packaging/testing/release tool
I http://doc.devpi.net/latest/
I pip
I https://pip.pypa.io/en/latest/
I Wheel
I http://wheel.readthedocs.org/en/latest/
I CheeseShop Tutorial
I https://wiki.python.org/moin/CheeseShopTutorial
I Warehouse
I https://warehouse.python.org/