Description
The README of this project says the following:
Mixed rust/python projects
To create a mixed rust/python project, create a folder with your module name (i.e.
lib.name
in Cargo.toml) next to your Cargo.toml and add your python sources there:my-project ├── Cargo.toml ├── my_project │ ├── __init__.py │ └── bar.py ├── Readme.md └── src └── lib.rs
maturin will add the native extension as a module in your python folder. When using develop, maturin will copy the native library and for cffi also the glue code to your python folder. You should add those files to your gitignore.
With cffi you can do
from .my_project import lib
and then uselib.my_native_function
, with pyo3/rust-cpython you can directlyfrom .my_project import my_native_function
.Example layout with pyo3 after
maturin develop
:my-project ├── Cargo.toml ├── my_project │ ├── __init__.py │ ├── bar.py │ └── my_project.cpython-36m-x86_64-linux-gnu.so ├── Readme.md └── src └── lib.rs
This is the structure I'm using for python-adblock
. The project is written entirely in Rust, but I'm using a mixed Rust/Python project in order to include Python type stubs. I have an __init__.py
which imports the neccesary symbols from the native module.
However, some of my users have reported that the imports inside __init__.py
fail as follows:
>>> import adblock
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/app/adblock/__init__.py", line 1, in <module>
from .adblock import __version__, Engine, FilterSet, BlockerResult, UrlSpecificResources
ModuleNotFoundError: No module named 'adblock.adblock'
or
>>> import adblock
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/app/adblock/__init__.py", line 1, in <module>
from adblock.adblock import __version__, Engine, FilterSet, BlockerResult, UrlSpecificResources
ModuleNotFoundError: No module named 'adblock.adblock'
See ArniDagur/python-adblock#17. As you can see, the result is the same whether I use from .adblock import ...
or from adblock.adblock import ...
. I have only managed to reproduce this when the package is installed system wide (pip3 install .
) and the current working directory is the root of my project (git repository).
Does anyone know what is going on? Am I doing something different from what is described in the README.md
, or is the advice in the README.md
wrong in some way?