SORU
22 Aralık 2010, ÇARŞAMBA


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
23 Aralık 2010, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006
  • Turkish Airlines

    Turkish Airl

    11 AĞUSTOS 2006
  • wwjoshdew

    wwjoshdew

    1 AĞUSTOS 2007