Выполнение модульных тестов 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, если я не собираю на месте?

0 ответов

Другие вопросы по тегам