pytest и pybind11: невозможно импортировать расширение С++

Я использую pybind11, чтобы добавить модуль _cxx в существующую библиотеку Python liba. liba._cxx.func не существует, пока я не скомпилирую расширение С++ и не установлю всю библиотеку с помощью setup.py.

Когда я запускаю тесты в liba/tests/test__cxx.py, он жалуется, что не может импортировать liba._cxx

Как это решить?


person R zu    schedule 24.01.2018    source источник
comment
кажется, решает это, удаляя __init__ в папке liba/tests, а затем перемещая все тесты из папки liba. Но мне все еще нужно проверить тесты немного больше. stackoverflow.com/questions/41748464 /   -  person R zu    schedule 24.01.2018


Ответы (2)


Из pytest не может импортировать модуль, а python может

Удалите __init__.py в тестовой папке. Таким образом, тест будет использовать liba, установленный в системе, вместо liba в исходном коде.

person R zu    schedule 24.01.2018

Мне пришлось указать путь в 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

Теперь я могу определить модуль, который включает в себя как чистые расширения Python, так и расширения C++, используя pybind11, и протестировать его с помощью pytest.

person Jim M.    schedule 08.02.2021