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 use lib.my_native_function, with pyo3/rust-cpython you can directly from .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?
The README of this project says the following:
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__.pywhich imports the neccesary symbols from the native module.However, some of my users have reported that the imports inside
__init__.pyfail as follows:or
See ArniDagur/python-adblock#17. As you can see, the result is the same whether I use
from .adblock import ...orfrom 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 theREADME.mdwrong in some way?