私はこれを自分でPythonパッケージsimplerandom
(BitBucket repo-編集: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
バージョン管理「トランク」(またはMercurialの「デフォルト」)にコミットしません。リリースを作成するときは、ソースコードの配布が最新で最新であるpython setup.py build_ext
ことを確認するために、最初にリリースすることを忘れないでくださいmycythonmodule.c
。また、リリースブランチを作成し、Cファイルをブランチにコミットします。そうすれば、そのリリースで配布されたCファイルの履歴レコードを手に入れることができます。