पायथन / साइथन foo.py -> foo.so - पायथन, साइथन

आसान सवाल गूगल जवाब नहीं कर सकता:

मैं अपने पुस्तकालय के कुछ हिस्सों को परिवर्तित करने के लिए साइथन का उपयोग कर रहा हूंविस्तार करने के लिए आसान स्क्रिप्ट का उपयोग मॉड्यूल। ऐसा करते समय मेरे पास अनिवार्य रूप से एक ही फ़ोल्डर में एक foo.so और foo.py फ़ाइल है। अब अगर मैं किसी अन्य फ़ाइल के लिए एक वर्ग आयात करता हूं तो अजगर स्वचालित रूप से foo.so का उपयोग करेगा या क्या मुझे foo.py का नाम बदलना होगा ताकि python foo.so का उपयोग करने के लिए मजबूर हो जाए? अग्रिम में धन्यवाद

उत्तर:

जवाब के लिए 0 № 1

एक उत्तर मिला @ http://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html

Pyximport

साइथन एक संकलक है। इसलिए यह स्वाभाविक है कि लोग साइथन मॉड्यूल के साथ एक संपादन / संकलन / परीक्षण चक्र से गुजरते हैं। आयात के दौरान ज़रूरत के हिसाब से "संकलन" चरण को निष्पादित करके इस प्रक्रिया को सरल बनाता है। उदाहरण के लिए, यदि आप एक Cython मॉड्यूल लिखते हैं जिसे foo.py कहते हैं, तो Pyximport के साथ आप इसे इस तरह से एक नियमित पायथन मॉड्यूल में आयात कर सकते हैं:

आयात pyximport; pyximport.install () आयात फू

ऐसा करने से foo.pyx (उचित अपवाद के साथ यदि इसमें कोई त्रुटि है) का संकलन होगा।


जवाब के लिए 0 № 2

The .so इसे सही तरीके से उपयोग करने के लिए एक एक्सटेंशन मॉड्यूल के रूप में स्थापित करने की आवश्यकता है ।स्थानीय निर्देशिका से आयात करते हैं, तो .py ओवरराइड करेंगे ।

यह निर्भर करता है कि क्या setup.py यदि यह भी मॉड्यूल स्थापित है जब मामला हो जाएगा स्थापित कर रहा है ।

संक्षेप में, एक setup.py एक्सटेंशन कोड के लिए कम से शामिल होना चाहिए:

from setuptools import setup
from Cython.Build import cythonize

setup(
ext_modules = cythonize("foo.py")
)

देख प्रलेखन.