2016-03-22 23 views
2

Anaconda'yı pycharm'da kullanıyorum ve bildiğiniz üzere, cyconon anaconda'da varsayılan olarak kuruldu. Projem, pycharm'da çalışmak istediğim küçük bir cython kodu içeriyor. Bunu nasıl yapabilirim?Anaconda ile pycharm'da cython kodu nasıl çalıştırılır?

import pyximport 
pyximport.install(setup_args={'include_dirs': np.get_include()}) 
import cython_helper 

Ve cython_helper.pyx dosyasında Cython kodunu yerleştirin: Bu eklenti sizin main.py içinde

: Bunu yapmak için

cevap

1

simpliest yolu pyximport kullanmaktır.

Eğer ENV değişkeni belirlesin sizin piton kodunu koşuyoruz önce, pencerelerde bu koştum ise (VS 2013):

SET VS90COMNTOOLS=%VS120COMNTOOLS% 
1

soru iki farklı anlama gelebilir: You have

  1. Bir .pyx kaynak dosyası, ancak sadece eski bir Python betiği gibi davranırsınız ve sadece betiğin eylemlerini çağırmak istersiniz.

  2. .pyx dosyanız bir uzantı modülüdür ve oluşturulduktan sonra, ondan içe aktarmak istersiniz.

diğer yanıtında olduğu gibi bunun için pyximport kullanabilirsiniz, ancak başka araçtır son runcython project olduğunu. runcython yüklendiğinde, yukarıdaki durum # 1 için, sadece yapabilirsiniz: Komut isteminden

runcython my_file.pyx 

ve my_file.pyx derlenmiş olacak, o zaman herhangi jenerik Python komut olacağını aynı şekilde yürütülür. Üst düzey tüm ifadeler yürütülür, ancak kolaylık sağlamak için bir ek sözleşme daha eklenir: Komut dosyanızda main adlı bir işlev varsa, runcython otomatik olarak onu arayarak, genel bir Python betiğinin if __name__ == '__main__' bölümü gibi davranacaktır. Böylece, Cython ile "betikleme" yapmak istiyorsanız, tüm üst düzey tanımlarınızı yapmalı, sonra "çalışma" nın tümünü en son tanımlanan main adlı üst düzey bir işleve sokmalısınız. kaputun altında standart kütüphane runpy ve runpy kullanır python -m modül Yürütme süreci, dayandığı için her zamanki if __name__ == '__main__' hile, genel olarak uzatma modülleri ile çalışmayacak

Not gelen bir kod nesne olacaksa gerektirir yürütülen modül - uzatma modüllerinin genellikle sahip olmadığı bir şey. "Kod nesnesi yok" hatası alırsınız (örneğin, my_file.so gibi Cython'unuzdan kurulum ve kurulum yaptıktan sonra, sadece python -m my_file ile deneyin).

# 2 numaralı durumda,projesi, daha genel olarak güvenilen çok dosya dağıtımı tabanlı yaklaşım için büyük bir sadeleştirme olan makecython sağlar. Bu nedenle, kodla oynamak için runcython'u kullandıktan sonra, yasal oluşturma ve dağıtım bölümü için makecython'u kullanabilirsiniz.

Bu hala yeni bir kitaplıktır, bu yüzden gerçek dünyadan, üretim bağımlılığından veya bir şeyden bahsediyorsanız bunu önermiyorum. Bu durumda, pyximport hala daha iyi olacak.

Ancak, .pyx uzantı modülünü genel bir modül gibi çağırmak istediğiniz hızlı ve kirli iş için, runcython uygun bir seçimdir.

İlgili konular