🦁
zxingのC++版をPython拡張モジュールとしてビルドする方法について
zxingはバーコードの読取、生成をするJava製のライブラリです。zxingのC++版はもともと公式が開発していましたが、現在は削除されています。ところが削除されたC++コードのフォークと、再実装された2種類がC++版として、現在も開発が続いています。ややこしい話ですが、今回紹介するのはC++17で再実装されているnu-book/zxing-cppの方になります。バージョンはv1.1.1を使います。
ソースコードの入手
$ git clone https://github.com/nu-book/zxing-cpp.git
$ cd zxing-cpp
$ git checkout -b v1.1.1 refs/tags/v1.1.1
ビルド
デフォルトだとシステムのPython用にビルドされてしまいますが、仮想環境(pyenv、venvどちらでも)用にビルドしたい場合はDPYTHON_EXECUTABLE=/path/to/bin/python
で指定することで対応できます。
$ cmake . \
-B ./bin/python \
-DBUILD_EXAMPLES=OFF \
-DBUILD_BLACKBOX_TESTS=OFF \
-DBUILD_PYTHON_MODULE=ON \
-DPYTHON_EXECUTABLE=/path/to/bin/python
$ cmake --build ./bin/python
ビルドが成功すると./bin/python/wrappers/python
にzxing.cpython-<VERSION>m-<PLATFORM>.so
が出来ています。これをPythonのパッケージをロードできる場所(site-packages
とか)に置けばimport zxing
でロードできます。使用例はdemo_reader.pyとかdemo_writer.pyが参考になると思います。
Discussion