jb3*_*326 7 python setuptools cython python-unittest
我有一个包含一些 Cython 扩展的 Python 3.6 包。让我们假设它的内容如下:
# example/example.pyx
def add(int a, int b):
return a + b
Run Code Online (Sandbox Code Playgroud)
我可以使用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]),
)
Run Code Online (Sandbox Code Playgroud)
现在我可以添加一个单元测试:
# 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)
Run Code Online (Sandbox Code Playgroud)
但是,如果我运行python -m unittest discover,则测试失败并显示 ,ImportError因为它找不到已编译的 Cython 模块。即使我已经使用python setup.py build_ext.
我发现使测试工作的唯一方法是使用 就地构建 Cython 模块python setup.py build_ext -i,但这似乎是不必要的。unittest如果我没有就地构建,有什么方法可以告诉库如何找到已编译的 Cython 模块?