🦁

zxingのC++版をPython拡張モジュールとしてビルドする方法について

2021/04/28に公開

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/pythonzxing.cpython-<VERSION>m-<PLATFORM>.soが出来ています。これをPythonのパッケージをロードできる場所(site-packagesとか)に置けばimport zxingでロードできます。使用例はdemo_reader.pyとかdemo_writer.pyが参考になると思います。

Discussion