tinyobjloader
の Python バインディングを pybind11 で書いて pypi にアップロードしました.
パッケージ自体は小さいので, setup.py などの設定を見てもらうのがはやいと思います.
PyPI パッケージングの手順
を参考にします.
バイナリパッケージの場合があまり書かれていません.
bdist_wheel
PyPi では, linux の場合は manylinux1_x86_64
のアーキテクチャのみ受け付けるようです.
(32bit 環境も同様に manylinux1 でいけるはず?)
manylinux にしていないと, pypi への upload 時に弾かれます.
$ python setup.py bdist_wheel -p manylinux1_x86_64
として -p
で manylinux1_x86_64
を指定してバイナリパッケージを作ります.
ただ, あんまり新しい環境とかコンパイラを使っているとうまくいかないかもです.
その場合は,
などにあるように, Docker で古めの OS を起動 + audiowheel で whl の作り直しがよさそうです.
PyPI へのアップロード
twine を使ってアップロードします.
Travis などで CI ビルドしたあとに, PyPI へアップロードしたい場合は, PyPI のサイトでアクセストークンを生成しておきます(このとき, とりあえず一回 twine でなにかしら whl アップロードして project を作っておく必要がある)
Travis の場合はこのあたり参考になります.
エラーなど
ImportError
実行時, import と
ImportError: dynamic module does not define module export function(PyInit_tinyobj)
などと出る場合. モジュールの定義と .so 名がことなっている(エラーメッセージの PyInit_***
と PYBIND11_MODULE での定義, setup.py での記述が同じか確認しましょう.
コンパイル環境と実行環境の python の違いも考えられます.
TODO
- Windows や macOS でのバイナリビルドも対応する. Travis や AppVeyor などと連携するのがいいかしら