Nasıl Cython Python kodu içeren bir paket yapısı kullanmalıyım
Python paketi Cython bazı kod içeren yapmak istiyorum. Cython kod güzel çalışıyor. Ancak, şimdi bu paketi nasıl bilmek istiyorum.
Sadece paketi yüklemek isteyen çoğu insan için, bu Cython oluşturur .c
dosyası vardır, ve setup.py
Bu modül üretmek için derlemek için düzenlemek istiyorum. Sonra kullanıcı paketi yüklemek için Cython yüklü ihtiyacı yok.
Ama insanlar için de değişiklik paketi, istiyorum da sevmesini sağlamak Cython .pyx
dosyaları, ve bir şekilde de izin vermek için setup.py
oluşturmak için onları kullanarak Cython (yani kullanıcılargerek Cython yüklü).
Nasıl paketinde dosyaları hem bu senaryoları karşılamak için yapı gerekir?
Cython documentation gives a little guidance. Ama Cython durumda olmadan/ile hem kolları setup.py
tek yapmak için nasıl demiyor.
CEVAP
Yaptım kendim şimdi, bir Python paketi simplerandom
(BitBucket repo) (beklemiyorum Bu için popüler bir paket, ama iyi bir şans öğrenmek Cython).
Bu yöntemi kullanır aslında bu bina .pyx
dosyası ile Cython.Distutils.build_ext
(en azından Cython sürüm 0.14) her zaman görünüyor oluşturmak için .c
dosya ile aynı dizinde kaynağı .pyx
dosya.
Burada temel gösterir umarım setup.py
cut-down versiyonu:
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,
...
)
Ben de MANIFEST.in
mycythonmodule.c
kaynak dağıtımı içinde yer almasını sağlamak (python setup.py sdist
ile oluşturulmuş bir kaynak dağıtım) düzenlenmiştir:
...
recursive-include cython *
...
Sürüm kontrolü için mycythonmodule.c
işlemek istemiyorum '(ya da 'varsayılan' Mercurial için).' trunk Bir serbest zaman python setup.py build_ext
bir ilk yapmak için mycythonmodule.c
kaynak kodu dağıtımı için mevcut ve güncel olduğundan emin olmak için hatırlamam lazım. Ben de bir yayım şube ve C Şubesi dosya kaydetme. Bu şekilde bu sürümü ile dağıtılan C dosya tarihi bir rekor var.
Nasıl bir dize Python Python kodu içer...
Python kodu nasıl koruyabilirim?...
Nasıl Eclipse package explorer içinde ...
Nasıl yeniden alma Python Yorumlayıcıs...
Nasıl Python ad bir paket oluşturabili...