soru iki farklı anlama gelebilir: You have
Bir .pyx kaynak dosyası, ancak sadece eski bir Python betiği gibi davranırsınız ve sadece betiğin eylemlerini çağırmak istersiniz.
.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.