maturinでRustコードをビルドして、Pythonからインポートする段階でエラーが出ました。
.stderr
AttributeError: module 'pymodtest' has no attribute 'add_two'
環境
Github Actions:
- ubuntsu-latest
- Python 3.12
- maturin 1.7.0
ソースコード
Github
fixedブランチに修正版もあります
ディレクトリ構成
inline-maturin
| -- inline_maturin.py
| -- test_inline_maturin.py
| -- pymodtest
| | -- Cargo.toml
| | -- pyproject.toml
| | -- __init__.py
| | -- src
| | | -- lib.rs
状況
- ImportErrorではない(インポート自体は成功)
- インポートしたモジュールから関数にアクセスしようとするとエラー
解決策
__init__.pyを削除する
考察
maturinは、__init__.pyが存在するモジュールをPythonとRustの混合モジュールとして解釈するようです。1
すると、maturinはPythonコードが入ったフォルダを探そうとします。しかし、今回そのフォルダは作っていないため、maturinはこのモジュールを空モジュールとして認識してしまい、AttributeErrorが送出されていたようです。