我现在自己在 Python 包中完成了此操作simplerandom
(BitBucket repo - 编辑:现在的github)(我不认为这是一个流行的包,但这是学习 Cython 的好机会)。
这种方法依赖于这样一个事实,即使用(至少使用 Cython 版本 0.14)构建.pyx
文件似乎总是在与源文件相同的目录中创建文件。Cython.Distutils.build_ext
.c
.pyx
这是一个精简版setup.py
,我希望能展示其要点:
from distutils.core import setup
from distutils.extension import Extension
try:
from Cython.Distutils import build_ext
except ImportError:
use_cython = False
else:
use_cython = True
cmdclass = {}
ext_modules = []
if use_cython:
ext_modules += [
Extension("mypackage.mycythonmodule", ["cython/mycythonmodule.pyx"]),
]
cmdclass.update({'build_ext': build_ext})
else:
ext_modules += [
Extension("mypackage.mycythonmodule", ["cython/mycythonmodule.c"]),
]
setup(
name='mypackage',
...
cmdclass=cmdclass,
ext_modules=ext_modules,
...
)
我还进行了编辑MANIFEST.in
以确保它mycythonmodule.c
包含在源代码分发中(使用创建的源代码分发python setup.py sdist
):
...
recursive-include cython *
...
我不承诺mycythonmodule.c
版本控制“主干”(或 Mercurial 的“默认”)。当我发布一个版本时,我需要记住首先做一个python setup.py build_ext
,以确保mycythonmodule.c
源代码分发存在并且是最新的。我还创建了一个发布分支,并将 C 文件提交到该分支。这样我就有了随该版本分发的 C 文件的历史记录。