pytest 和 pybind11:无法导入 C++ 扩展
pytest and pybind11: can't import c++ extension
我使用 pybind11 将模块 _cxx
添加到现有 python 库 liba
。
liba._cxx.func
在我编译 c++ 扩展并通过 setup.py
安装整个库之前不存在。
当我 运行 在 liba/tests/test__cxx.py
中测试时,它抱怨无法导入 liba._cxx
如何解决?
来自
删除测试文件夹中的 __init__.py
。这样,测试将使用系统中安装的 liba
而不是源代码中的 liba
。
我必须在 conftest.py
中指定路径
import os
import sys
directory = os.path.abspath(os.path.dirname(__file__))
sys.path.insert(0, directory)
sys.path.insert(0, directory + os.sep + "../pybewego")
sys.path.insert(0, directory + os.sep + "..")
pytest 也无法处理 c++ 模块与 python 模块同名的特定情况。我必须遵循那里建议的惯例:
https://github.com/pybind/pybind11/issues/1004#issuecomment-322941844
现在我可以使用 pybind11 定义一个包含纯 python 和 c++ 扩展的模块,并使用 pytest 进行测试。
我使用 pybind11 将模块 _cxx
添加到现有 python 库 liba
。
liba._cxx.func
在我编译 c++ 扩展并通过 setup.py
安装整个库之前不存在。
当我 运行 在 liba/tests/test__cxx.py
中测试时,它抱怨无法导入 liba._cxx
如何解决?
来自
删除测试文件夹中的 __init__.py
。这样,测试将使用系统中安装的 liba
而不是源代码中的 liba
。
我必须在 conftest.py
中指定路径import os
import sys
directory = os.path.abspath(os.path.dirname(__file__))
sys.path.insert(0, directory)
sys.path.insert(0, directory + os.sep + "../pybewego")
sys.path.insert(0, directory + os.sep + "..")
pytest 也无法处理 c++ 模块与 python 模块同名的特定情况。我必须遵循那里建议的惯例:
https://github.com/pybind/pybind11/issues/1004#issuecomment-322941844
现在我可以使用 pybind11 定义一个包含纯 python 和 c++ 扩展的模块,并使用 pytest 进行测试。