在遵循各种有关编译锈库以便从Python进一步导入的教程(我尝试了PyO3和rust-cpython)的同时,我已经能够构建一个简单的库,并成功地从我的main.py
和交互式Python shell导入它
然而,当尝试测试和基准测试纯Python与我的Rust库时,我始终会遇到导入错误:
_____________________________________________ ERROR collecting main.py _____________________________________________
ImportError while importing test module '/Users/xxx/pyo3/sumlib/main.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/Users/xxx/.pyenv/versions/3.8.2/lib/python3.8/importlib/__init__.py:127: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
main.py:1: in <module>
import sumlib
E ModuleNotFoundError: No module named 'sumlib'
同样,该库从主python文件和交互式shell(如IPython
)导入的效果很好
我在macOS Big Sur上,Python 3.8是使用pyenv
安装的。这是我的Cargo.toml
:
[package]
name = "sumlib"
version = "0.1.0"
edition = "2018"
[lib]
name = "sumlib"
# "cdylib" is necessary to produce a shared library for Python to import from.
#
# Downstream Rust code (including code in `bin/`, `examples/`, and `tests/`) will not be able
# to `use string_sum;` unless the "rlib" or "lib" crate type is also included, e.g.:
# crate-type = ["cdylib", "rlib"]
crate-type = ["cdylib", "rlib"]
[dependencies.pyo3]
version = "0.14.2"
features = ["extension-module"]
从PyO3
和rust-cpython
到相同的结果,其他一切都非常琐碎
tl/dr:使用
python -m pytest
而不是pytest
调用测试听起来您好像还没有安装Python扩展模块(例如,使用
pip install
),而是依赖于它位于您的工作目录中。这将允许您使用解释器或通过python -m
启动的main.py
导入它但不使用
pytest examples/main.py
或python examples/main.py
这是因为
ipython
和python -m
都将包含扩展模块的当前目录添加到Python的sys.path
,但是pytest examples/main.py
和python examples/main.py
没有。(请参阅pytest docs。)您可以通过安装扩展模块或使用python -m pytest
而不是pytest
运行测试来解决此问题相关问题 更多 >
编程相关推荐