Выполнение модульных тестов Python без создания расширений на месте
У меня есть пакет Python 3.6, который включает в себя некоторые расширения Cython. Давайте предположим, что его содержимое следующее:
# example/example.pyx
def add(int a, int b):
return a + b
Я могу построить это с помощью setuptools
с этим сценарием
# setup.py
from setuptools import setup, Extension
from Cython.Build import cythonize
example_ext = Extension(
name='example.example',
sources=['example/example.pyx'],
)
setup(
name='Example package',
packages=['example'],
ext_modules=cythonize([example_ext]),
)
Теперь я могу добавить юнит-тест:
# example/tests/test_example.py
import unittest
from example.example import add
class TestExample(unittest.TestCase):
def test_add(self):
result = add(4, 5)
self.assertEqual(result, 9)
Тем не менее, если я бегу python -m unittest discover
тесты проваливаются с ImportError
так как он не может найти скомпилированный модуль Cython. Это происходит, даже если я уже собрал модуль, используя python setup.py build_ext
,
Единственный способ, как я нашел, чтобы заставить тесты работать, - это построить модуль Cython на месте, используя python setup.py build_ext -i
, но это, кажется, должно быть ненужным. Есть ли способ сказать unittest
библиотека, как найти скомпилированные модули Cython, если я не собираю на месте?