kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

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にはバージョンも指定する

バージョン違いでいろいろ手間取るのはこの本読み始めてからいろいろ経験しました