python Virtualenv DLL फ़ोल्डर क्यों नहीं बनाते हैं?




windows pydev (3)

मैंने इस विषय की थोड़ी अधिक जांच की। मैंने तकनीकीनिक के बयान से शुरू किया - इसका उत्तर सरल है - इसे लागू नहीं किया गया हालांकि, एक और सवाल पूछता है - क्यों कोई इसे लागू नहीं? मुझे संदेह है क्योंकि यह काम करता है यह एक और सवाल की ओर जाता है - यह काम क्यों करता है?

कारण वर्चुअलएन्व में प्रतिलिपि किए जा रहे DLLs फ़ोल्डर के बिना सब कुछ काम करता है

  • पायथन खोज के लिए sys.path को किसी भी dll की आवश्यकता है
  • sys.path बाद virtualenv के सक्रियण में मूल DLLs फ़ोल्डर के पथ शामिल हैं

पहले वक्तव्य को बस sys.path से DLLs फ़ोल्डर के पथ को हटाने और select मॉड्यूल (इस मॉड्यूल को DLLs फ़ोल्डर से select.pyd फ़ाइल की आवश्यकता है) का उपयोग करके परीक्षण किया जा सकता है, जो तब विफल रहता है।

टिप्पणी में आप कहते हैं कि मैं अजगर मॉड्यूल की DLL को आभासी वातावरण में पायथन कोड के साथ रखना चाहूंगा। केवल virtualenv में DLLs फ़ोल्डर को कॉपी करके संभव है इस कारण यह काम करता है कि sys.path के सक्रियण के बाद sys.path में virtualenv के अंदर DLLs फ़ोल्डर का पथ भी होता है (हालांकि sys.path बनाने पर ऐसा कोई फ़ोल्डर नहीं बनाया जा रहा है)। यह पथ मूल DLLs फ़ोल्डर के पथ के सामने रखा जाता है जिसका अर्थ है कि पहले खोज की जा रही है और इस तरह मूल DLLs फ़ोल्डर को ओवरराइड कर दिया गया है।

मैंने पायथन की मेलिंग लिस्ट में Windows पर डीएलएल के फ़ोल्डर का प्रश्न पोस्ट किया।

मैं सोच रहा हूँ कि वर्चुअलएन्वएल DLLs फ़ोल्डर को उसी तरह से नहीं बना लेता है जिस तरह से यह Lib और Scripts बनाता है?

प्रश्न मेरे पास आया जब मेरे पास PyDev के साथ निम्नलिखित समस्या थी;
मैं अपने एक वर्चुअलएन्विज़ को पायथन इंटरप्रिटर के रूप में सेट कर दिया और सब कुछ एक अपवाद के साथ ठीक था मैंने select मॉड्यूल से सभी आयातों के लिए अनसुलझे आयात के बारे में चेतावनियां रखी हैं। इसका कारण यह है कि अधिकांश मॉडलों के विपरीत, select मॉड्यूल केवल DLL फ़ोल्डर में मौजूद है।


आईएमओ इसके लिए अधिक कारण हैं:

  • सुरक्षा: कुछ वातावरणों में, सुरक्षा को भंग करने से रोकने के प्रयास में, यादृच्छिक स्थानों से सामान लोड करने / लोड करने से इनकार करना नीति है इस प्रकार,
  • कुछ प्रसिद्ध डीएलएल लोड ऑर्डर , जो कि दुर्भावनापूर्ण डीएलएस लोड होने से रोकता है :)। यहां भी देखें

HTH,


इसका उत्तर सरल है - इसे लागू नहीं किया गया जब मैंने पैलेस्टेनएक्स डीएलएल को virtualenv परिवेश में कॉपी करने के लिए पैच बनाया - मैं एक भिन्न समस्या हल कर रहा था:

जब पायथन सिस्टम-वाइड स्थापित किया जाता है - python.exe बाइनरी जो कि वर्चुअलएन्वय में कॉपी की जाती है, हमेशा अपने पायथॉनजेक्स डीएलएल को ढूंढ पाती है, क्योंकि यह। Dll विंडोज़ \ सिस्टम 32 से उपलब्ध है। यदि अजगर केवल वर्तमान उपयोगकर्ता के लिए स्थापित किया गया है - pythonXX.dll को पायथन XX डायर में रखा गया है जहां मूल पायथन.एक्सई स्थित है। इसलिए जो समस्या मैं हल कर रहा हूं वह वर्तमान उपयोगकर्ता के लिए स्थापित पायथन के साथ बनाए गए आभासी वर्जन को ठीक करना है। यह सब चीजों को खुदाई करने में काफी समस्या थी

सवाल पर वापस मैं वास्तव में नहीं जानता कि यह कैसे PythonXX.dll को अपने DLL मॉड्यूल पाता है - यह पायथन डेवलपर्स के लिए एक प्रश्न है, लेकिन मुझे संदेह है कि उन्हें नहीं मिल रहा है। मुद्दा # 87 के फिक्सिंग करते समय मैंने इस मुद्दे को ठीक नहीं करने का कारण यह है कि मेरे कोड ने शायद इस DLL निर्देशिका से मॉड्यूल का उपयोग कभी नहीं किया।





virtualenv