主旨
OpenCV使いのみなさんも、作っているライブラリの中で、公開することが許されるものがあったら、テストして、リファクタリングして、パッケージにまとめて、PyPIに登録しませんか。
開発しているとほしいものがでてくるよね
- まず探してみよう。
- なかったら、作るしかない。
- 役に立つ実装と利用例を作ってみる。
- 複数のプロジェクトで、使ってみる。
- 使えるものなったか。
pythonモジュール化する。
- モジュール名を決める。
- モジュールフォルダに
__init__.py
ファイルをおく。 - pyproject.toml を書く。
- [dependencies] に依存パッケージとバージョンを記入する。
-
python3 -m pip install .
をできるようにする。
testを書く
- mkdir test
- 動作検証するpythonスクリプトの中にassert を書く。
- 意味のまとまりを def test_関数名(): など関数に抽出する。
- pytest test_*.pyでテストが実行できるようにする。
- Makefile に make testを書く。
リファクタリングする
- black などのフォーマッタを使って書式をそろえる。
- モジュールの中の関数で公開する必要ないものは"_" アンダースコアで始まる名前にする。
- 変数名・関数名などを読めばわかる名前に直す。
- typehintをする。
- 関数には副作用を持たないように設計する。
- 副作用を持つときは、そのことがわかるようにdoc comment に書く。
-
import モジュール名
だけで動作するように、__init__.py
に必要な加筆をする。
例
`from .somefile import 識別子` みたいなものを書き加えます。
利用側のスクリプトでの動作確認
-
python3 -m pip install .
でパッケージをインストールしたあとに、利用側のスクリプトでの動作を確認する。 -
使い勝手は意図したものになっているか。
コードを公開する範囲は社内、社外
Githubのそのリポジトリはprivate, public
社内:Packagecloud
社外:PyPI
ライセンスを確認する。
公開先の範囲に応じて、コメントのコードの日本語コメントの扱いを再考する。
わかりやすい日本語ならば、機械翻訳して得られた英語の品質もそれなりになってきている。
パッケージを作り公開する。
- pyproject.toml の設定にもとづいて、whlパッケージを作ります。
- 作ったものを別PCなどで使えるか確認します。
- PyPiのテスト環境へのアップロードするまでの作業の備忘録
- PyPIに登録した内容を検証する pip install ${自作パッケージ} の確認
まとめ
手順をふんでいくと、意外と簡単です。
みなさんも、作ったライブラリのうち、再利用性のあるものを公開して、楽しいOpenCVライフをしていきましょう。
つっこみ:OpenCVに限った話じゃないじゃないか
そうです。OpenCVなどを利用しているアルゴリズム系のエンジニアの場合、システム系の作業が弱いことが多いので、私の場合ながらく、パッケージを公開することがありませんでした。でも、あなたの作ったアルゴリズムをぜひ、共有できるぶんを共有してほしいので、OpenCVのAdvent Calendar に書きました。