2011-11-09 9 views
5

ile bölüm oluşturma ile Buildout Benildout içinde cython sorunla karşı karşıyayım.Cyclhon

Parçalardan biri, .c dosyasından ve .pyx dosyasından gelen bir cython modül yapısıdır.

Zaten denemek ettik birçok çözüm:

  • Ama hepsi hata ile sona erer:

    ImportError: No module named Cython.Distutils

    Bu ekleme kurulumları sona yükBu cython modülünün.

    Not: setup.py, kendi dizininden ve buildout bin dizinindeki bir yorumlayıcıdan çağrıldığında işlevseldir.

    Yardımlarınız için teşekkürler.

  • +0

    Cython'un düzgün şekilde yüklendiğinden ve Cython modülleri nerede yayılacak şekilde PYTHONPATH ortam değişkenini ayarladığınızdan emin misiniz? –

    +0

    Sistem düzeyinde mi demek istediniz? Bu, bu dürüstlüğün sthon olmadan bir sisteme yerleştirilememesini mümkün kılacak ... –

    +0

    "Sistem seviyesi" ile ne demek istiyorsun? –

    cevap

    4

    Bağlandığınız makaleler, Cython'u bir kuruluş biriminden nasıl yükleyeceğinizi anlatır, ancak bunu yapmak için site-packages klasörüne yazma erişimi gerekir. Orada o buildouts çalıştırmak mümkün olmalıdır 3 yolu vardır: kök olarak

    1. çalıştırın onu ve sistem Python en site paketleri içine Cython yükleyin. Genellikle bunu yapmaktan kaçınmak istersiniz.

    2. Kendi Python'unuzu derleyin. Bu, için zaten sistemde olmayan bir Python sürümü kullanmak isterseniz, tek seçenek olabilir. Buildout'un içinden Python'un herhangi bir sürümünü oluşturmanıza olanak tanıyan buildout yapılandırmaları vardır.

    3. virtualenv'u kullanın. Bu, kendi site-packages klasörünü içeren Python için bir tam sanal ortam oluşturacaktır (buildout klasöründe). Bu genellikle, sistem Python'u (veya zaten sisteminizin yüklü olduğu olan herhangi bir Python'u) kullanabilen bir buildout'u çalıştırmanın en iyi yoludur.

    Yazılımınızın yükleme yönergelerini virtualenv kullanarak yapmanızı öneririz.

    +0

    Bu teklif için teşekkür ederim, ben bu şekilde kazacağım. –

    1

    Bunu tek adım olarak yapmanın bir yolu yoktur, ancak iki adımlı bir işlem olarak yapılması kolaydır.

    Kullanım:

    python bootstrap.py 
    ./bin/buildout install cython 
    ./bin/cpy bootstrap.py 
    ./bin/cpy ./bin/buildout 
    

    böyle, kurulumları sona bilinmeyen bir seçenek hiç hangi kimse hakkında konuşmalar 'install' destekler, ancak kullanabilirsiniz çünkü bu mümkün nedeni:

    [buildout] 
    parts = deps py # <---- Notice we don't depend on cython here 
    eggs = 
        whatever 
        kdist 
        nark 
        kivy # <--- But we do have a module that requires cython to build 
    develop = 
        . 
        lib/nark 
        lib/kivy-dist 
    
    [cython] # <---- By calling ./bin/buildout install cython we trigger this 
    recipe = zc.recipe.egg:script 
    parts = cython-py 
    interpreter = cpy # <--- Which makes our dummy ./bin/cpy 
    eggs = 
        cython 
        pyinstaller 
    
    [deps] 
    recipe = zc.recipe.egg:eggs 
    eggs = ${buildout:eggs} 
    
    [py] 
    recipe = zc.recipe.egg:script 
    interpreter = py 
    eggs = ${buildout:eggs} 
    

    Bu yaklaşımla ilgili en önemli şey, ikinci kez numaralı binayı çalıştırmanın depo dizini temizlemesidir, böylece günün sonunda bir bin dizini bırakmış olursunuz. Böyle ooks: veya virtualenv asmak ve daha sonra işleri batırmaya olmayabilir

    $ ls bin/ 
    buildout garden py 
    

    yok artık paketler. Bu yüzden ilk etapta buildout kullanıyoruz? Eğer Cython asmak istiyorsanız

    ... Tabii, yanı üstündeki bağımlılıkları içine sopa Arabistan'dan.

    +0

    Bu yüzden bu parametre hakkında ne kadar havalı bir şey bilmiyordum ve aradığım eksik parça (buradout'u çalıştırırken tüm parçaları yeniden inşa etmemek). Gracias! –

    2

    Bugün bu tarifi bu sorunu çözen https://pypi.python.org/pypi/mr.cython/1.0 buldum.

    kullanabilmek için bu kurulumları sona çalıştırma setup.py develop

    sorun, sistemin seviyesi olarak monte Cython kalmadan Cython modülü oluşturmak için olan bu bir uzantı tarifi ile Cython yükleyerek sorunu çözer.

    +0

    Cevap bana iyi görünüyor. OP kendi sorusuna, ilgili bir çözüm ve bağlam ile cevap veriyor. –

    +0

    OP'in orijinal sorudan bir cevap vermesi için birkaç yıl sonra geri gelmesi, StackOverflow'un ruhuna göre çok fazladır ve upvotes hak etmektedir. İlgili XKCD'ye bakınız: https://xkcd.com/979/ –

    +0

    @ HåkenLid: Peki, ben de bıktım. @ OP: Ayrıca cevabını da kabul edebilirsin :-) –