4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PyPI に Linux バイナリでパッケージをアップロードするメモ

Last updated at Posted at 2019-05-17

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

として -pmanylinux1_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 などと連携するのがいいかしら
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?