运行Python单元测试而无需就地构建扩展

时间:2017-06-26 19:58:59

标签: python cython setuptools python-unittest

我有一个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构建了模块,也会发生这种情况。

我发现使测试工作的唯一方法是使用python setup.py build_ext -i就地构建Cython模块,但这看起来应该是不必要的。如果我没有就地构建,有没有办法告诉unittest库如何找到已编译的Cython模块?

0 个答案:

没有答案