PPP3: パッケージの利用
Chapter 09 Pythonパッケージの利用と開発への適用
本章ではその先の手順として、ステージング環境や本番環境へのデプロイ、テスト実行のためのデプロイなどで使えるパッケージの活用方法について紹介します。
りょ
09-01 パッケージを使う
- パッケージのバージョン指定方法いろいろ
- setup.pyで使うことが多い
-i
オプションでIndexサーバを指定する デフォルトはPyPI-f
コマンドでWebサイトからパッケージを取得- 配布形式にはsdist(ソース等をアーカイブしたもの)、wheel(バイナリ)がある
昔はeggっていうのもあったらしい
どっかで何か試してたときにもeggっていう文字列を見たな
- wheelが公式で、pipはwheel形式(拡張子.whl)を優先して使う
- wheelの方がインストールが速いのでCIやデプロイが高速化できる
pip wheel
でパッケージをwheelにしてローカルに保存できる(wheelhouse)- インストールするときには
-f
でディレクトリを指定し、--no-index
オプションをつける
09-02 manylinux wheelを作成する
- プラットフォームが異なるとwheelが利用できない 特にLinux
たぶんPythonのみで書かれたライブラリならどこでも使えるんだよね?
- manylinux形式なら共通のwheelhouseを利用できるようにできる
numpyのビルドにはFortranのコンパイラ・ライブラリまで必要とな
Alpine Linuxではmanylinux形式は使えないらしい
- manylinux形式のビルドには専用のDockerイメージを用いる
なるほどね
- wheelhouseをまるごとmanylinux化するにはスクリプトを用いる
- 更新・ライセンスに注意
09-03 パッケージを活用する
- PyPIに公開できないパッケージはGitHub等の上にプライベートリリースする
- ライブラリの環境を構築するには、
pip freeze
で作ったrequirements.txtを使う - 他のファイルを参照する機能を使って、用途に合わせてrequirements.txtを分割する
- tox.iniでrequirementsファイルを指定することもできる
- tox.iniではなくrequirementsファイルを変更した場合は
-r
で仮想環境を再作成 - 環境間でライブラリのバージョンを一致させるため、requirements.txtにはバージョンも指定する
バージョン違いでいろいろ手間取るのはこの本読み始めてからいろいろ経験しました