pytest和pybind11:无法导入c ++扩展名

时间:2018-01-24 19:16:53

标签: python pytest pybind11

我使用pybind11将模块_cxx添加到现有的python库liba。 在编译c ++扩展并按liba._cxx.func安装整个库之前,setup.py不存在。

当我在liba/tests/test__cxx.py中运行测试时,它会抱怨它无法导入liba._cxx

如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

来自pytest cannot import module while python can

删除测试文件夹中的__init__.py。这样,测试将使用系统中安装的liba而不是源代码中的liba

答案 1 :(得分:0)

我必须在 conftest.py 中指定路径

^(https?:\/\/)((?:[^.\/]+\.)*?)([^.\/\n]+)(\.[^.\/]+)?$
^(https?://)((?:[^./]+\.)*?)([^./]+)(\.[^./]+)?$

pytest 也无法处理 c++ 模块与 python 模块同名的特定情况。我必须遵循那里的约定:

https://github.com/pybind/pybind11/issues/1004#issuecomment-322941844

现在我可以使用 pybind11 定义一个包含纯 python 和 c++ 扩展模块并使用 pytest 进行测试的模块。