我现在已经在Python程序包simplerandom
(BitBucket repo-编辑:now github)中亲自完成了这个任务(我不希望这是一个受欢迎的程序包,但这是学习Cython的好机会)。
此方法依赖于以下事实:.pyx
使用Cython.Distutils.build_ext
(至少使用Cython版本0.14)构建文件似乎总是.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
版本控制“ trunk”(或Mercurial的“ default”)。发布时,我需要记住先进行操作python setup.py build_ext
,以确保mycythonmodule.c
该源代码是最新的并且是最新的。我还创建了一个release分支,并将C文件提交到该分支中。这样,我就拥有与该发行版一起分发的C文件的历史记录。