2013-06-04 11 views
5

मैं इन अन्य दो सवाल का एक ही त्रुटि हो रही है: ImportError: dynamic module does not define init function, but it does और Cython compiled C extension: ImportError: dynamic module does not define init functionपायथन में गतिशील मॉड्यूल का init फ़ंक्शन क्या है?

लेकिन उनकी समाधान बराबर नहीं हैं, और मेरे लिए भी काम नहीं किया।

मैं अपने पायथन प्रोग्राम के अंदर सी में लिखी गई साझा लाइब्रेरी के कार्यों को कॉल करने का प्रयास कर रहा हूं।

मैं इस तरह किसी को अपने साझे lib संकलित:

gcc -shared -Wl,-soname,playfaircrack.so -o playfaircrack.so -fPIC playfaircrack.c scoreText.o 

मैं एक मॉड्यूल बनाया है, और इस मॉड्यूल के अंदर मैं के साथ इस lib लोड:

cracker = ctypes.cdll.LoadLibrary('./playfaircrack.so') 

लेकिन जब मैं कोड चलाने के लिए, मैं निम्न त्रुटि:

Traceback (most recent call last): 
    File "playfair.py", line 2, in <module> 
    import playfaircrack 
ImportError: dynamic module does not define init function (initplayfaircrack) 

जो बहुत अजीब है, क्योंकि अगर मैं पाइथन दुभाषिया चलाता हूं, और डीआईआर कॉल करता हूं ectly:

cracker = ctypes.cdll.LoadLibrary('./playfaircrack.so') 

मैं अपने साझा lib के कार्यों तक पहुंच सकता हूं।

कोई विचार यह कैसे हल करें? धन्यवाद।

उत्तर

2

लाइन हटाएं

import playfaircrack 
playfair.py में

और यह काम करना चाहिए।

वैकल्पिक रूप से, playfaircrack.so का नाम किसी अन्य चीज़ पर बदलें या इसे किसी भिन्न निर्देशिका में ले जाएं। पाइथन भ्रमित हो जाता है यदि आपके पास एक ही मॉड्यूल नाम के साथ दो फाइलें हैं, यानी playfaircrack.py और playfaircrack.so एक ही निर्देशिका में हैं। पाइथन playfaircrack.so आयात करने का प्रयास करता है, जो playfaircrack.py पर पहुंचने से पहले कोई वैध पायथन मॉड्यूल नहीं है।

+0

ठीक है। मैं बस ऐसा नहीं कर सकता क्योंकि प्लेफेयर मुख्य कार्यक्रम है, और playfaircrack मुख्य कार्यक्रम से बुलाया जाने वाला एक मॉड्यूल है। –

+0

उत्तर अद्यतन किया गया। एक ही नाम के साथ दो मॉड्यूल काम नहीं करते हैं। –

+0

कभी ऐसा कुछ नहीं हुआ। इसने काम कर दिया। धन्यवाद :) –

संबंधित मुद्दे

 संबंधित मुद्दे