2011-05-08 9 views
5

मैं "lib-dynload" निर्देशिका में स्थित किसी भी मूल मॉड्यूल को आयात नहीं कर सकता। वे सब वहाँ हैं, लेकिन मुझे त्रुटि मिलती है: "ImportError: No module named X" उन्हें आयात करने का प्रयास करते समय।क्रॉस-संकलित पायथन मूल मॉड्यूल (गणित, ऑपरेटर, आदि) नहीं ढूंढ सकता

मैंने अपने sys.path की जांच की और इसमें निर्देशिका शामिल है जहां ये सभी मॉड्यूल स्थित हैं और मेरा पायथनहोम पर्यावरण चर सही ढंग से सेट है। मुझे कुछ नुकसान हो रहा है कि समस्या क्या हो सकती है। कुछ पृष्ठभूमि जानकारी: यह पाइथन 2.6.6 स्रोत से क्रॉस-संकलित है और एंगस्ट्रॉम के साथ एआरएम एम्बेडेड लिनक्स बोर्ड पर स्थापित है।

इसमें पहले पाइथन था, मैंने इसे छवि में थोड़ा-सा सेंकने की कोशिश की थी, लेकिन इसमें बहुत सी चीजें गायब थीं। मैं अपने क्रॉस संकलित संस्करण पर लोड करने से पहले पिछले पायथन के साथ कुछ भी करने के लिए निर्देशिका पेड़ को साफ करने के लिए अपना सर्वश्रेष्ठ प्रयास कर रहा हूं।

एक सरल स्क्रिप्ट है कि बस आयात करने के लिए प्रयास करता है math का एक strace: http://pastebin.com/3XgJ3nPR

उत्तर

2

मैं math.so या mathmodule.so की तरह फ़ाइल नाम जो कि साझा-वस्तु मॉड्यूल पूरी तरह से बंद कर दिया है संकेत हो सकता है के लिए है कि पता लगाने में कोई भी चेक देखते हैं - कि आपके द्वारा संकलित पाइथन का संस्करण गतिशील रूप से बाइनरी मॉड्यूल लोड नहीं कर सकता है।

अधिक: मेरी सबसे हाल अजगर निर्माण से config.out से अधिक लग रही है, मैं कई लाइनों जहां अजगर जांच कर रही है कि क्या मंच यह गतिशील द्विआधारी मॉड्यूल .so में खत्म हो लोड करने देगा देखें:

checking for dlopen... yes 
checking DYNLOADFILE... dynload_shlib.o 
checking MACHDEP_OBJS... MACHDEP_OBJS 

क्या क्या ये लाइनें आपके क्रॉस-कंपाइल पर कहती हैं?

+0

क्या आपको यह पता चल जाएगा कि इस तरह संकलित करने के लिए क्या ध्वज या चर सेट करना है? मैं मेक/सेटअप/विन्यास परिणाम देख सकता हूं। – Jon

+0

नहीं - जब मैं i386 के लिए उबंटू पर पायथन संकलित करता हूं, तो यह स्वचालित रूप से निर्णय लेता है कि यह साझा वस्तुओं को लोड करने में सक्षम है। शायद यह 'dlopen()' सिस्टम कॉल के लिए जांचता है? हां, ऐसा लगता है कि यह करता है - मैं अपना जवाब अपडेट करूंगा। –

+0

यह दो स्थानों में इसके लिए जांचता है। प्रासंगिक भागों: http://pastebin.com/UQ2ZsteE। परिणाम विफलता है। यह मुद्दा होना चाहिए, धन्यवाद। मैं इसे किसी भी सिफारिशों को हल करने के तरीके में देखूंगा? एफवाईआई: मैंने हाल ही में कर्नेल और इसी टूल श्रृंखला को स्विच करने का फैसला किया है, पिछले उपकरण श्रृंखला क्रॉस संकलित पायथन बिना किसी समस्या के। – Jon

0

मैंने हाल ही में पाइथन 2.7.13 के निर्माण के समान मुद्दे पर भाग लिया है, और मेरा मानना ​​है कि यह this bug है जिसे पाइथन 3 के लिए तय किया जा रहा है लेकिन 2 पर वापस नहीं भेजा गया है। बिल्ड प्रक्रिया (setup.py) की एक सूची उत्पन्न करती है बनाने के लिए मॉड्यूल, और फिर अंतर्निहित मॉड्यूल की सूची घटाता है (sys.builtin_module_names); हालांकि, python2.7 का उपयोग करके setup.py चलाया जाता है (मेकफ़ाइल से) जो मेरे मामले में सिस्टम के बजाय सिस्टम (उबंटू) बाइनरी उठाता है, इसलिए यह सिस्टम पाइथन (ऑपरेटर सहित) के लिए अंतर्निहित मॉड्यूल को घटा देता है। संग्रह) लेकिन किसी के निर्माण के लिए नहीं, इसलिए वे न तो अंतर्निहित हैं और न ही बाहरी मॉड्यूल के रूप में निर्मित हैं।

मैं बग से एक सुझाव का उपयोग करने में सक्षम था और स्रोत निर्देशिका में, निर्मित पाइथन को पथ में (और python2.7 -> पायथन से एक सिम्लिंक जोड़ें) को प्रीपेड करने में सक्षम था। यह काम करता है क्योंकि मैं एक बहु-आर्क x64 मशीन पर x86 पायथन बना रहा था; यदि आप एआरएम जैसे किसी अन्य सिस्टम के लिए निर्माण कर रहे हैं तो आपको होस्ट पाइथन की बजाय निर्माण प्रक्रिया में पहले से निर्मित मॉड्यूल की सूची प्राप्त करने के लिए बग से पैच को लागू करने की आवश्यकता हो सकती है।

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