2009-04-02 11 views
98

कई तृतीय-पक्ष पायथन मॉड्यूल में एक विशेषता है जिसमें मॉड्यूल के लिए संस्करण जानकारी होती है (आमतौर पर module.VERSION या module.__version__ जैसे कुछ), हालांकि कुछ नहीं करते हैं।रनटाइम पर एक पायथन मॉड्यूल संस्करण की जांच

इस तरह के मॉड्यूल के विशेष उदाहरण libxslt और libxml2 हैं।

मुझे लगता है कि इन मॉड्यूल का सही संस्करण रनटाइम पर इस्तेमाल किया जा रहा की जाँच करने की जरूरत है। क्या इसे करने का कोई तरीका है?

एक संभावित समाधान wold, कार्यावधि में स्रोत में पढ़ा यह हैश, और उसके बाद प्रसिद्ध विवरण के हैश से तुलना करने में हो सकता है, लेकिन यह बुरा है।

क्या कोई बेहतर समाधान है?

उत्तर

7

मैं hashing से दूर रहना चाहते हैं। इस्तेमाल किए जा रहे libxslt के संस्करण में कुछ प्रकार का पैच हो सकता है जो आपके उपयोग को प्रभावित नहीं करता है।

एक विकल्प के रूप में, मैं यह है कि आप रन टाइम पर जांच नहीं करते सुझाव देना चाहते हैं (यदि यह एक कठिन आवश्यकता है या नहीं पता नहीं है)। पाइथन सामग्री के लिए मैं लिखता हूं कि बाहरी निर्भरताएं (तृतीय पक्ष पुस्तकालय) हैं, मैं एक स्क्रिप्ट लिखता हूं जो उपयोगकर्ता अपने पायथन इंस्टॉल को जांचने के लिए चला सकते हैं यह देखने के लिए कि मॉड्यूल के उचित संस्करण स्थापित हैं या नहीं।

मॉड्यूल है कि एक परिभाषित 'संस्करण' विशेषता नहीं है, आप इंटरफेस यह (वर्गों और तरीकों) शामिल निरीक्षण कर सकते हैं और अगर वे इंटरफ़ेस वे अपेक्षा से मेल देखें

। फिर उस वास्तविक कोड में जिस पर आप काम कर रहे हैं, मान लीजिए कि तृतीय पक्ष मॉड्यूल में आपके द्वारा अपेक्षित इंटरफ़ेस है।

7

कुछ विचार:

  1. कोशिश कार्यों है कि मौजूद या अपने जरूरत संस्करणों में मौजूद नहीं है के लिए जाँच।
  2. यदि कोई फ़ंक्शन अंतर नहीं है, तो फ़ंक्शन तर्क और हस्ताक्षर का निरीक्षण करें।
  3. यदि आप इसे फ़ंक्शन हस्ताक्षर से नहीं समझ सकते हैं, तो आयात समय पर कुछ स्टब कॉल सेट करें और उनके व्यवहार की जांच करें।
213

pkg_resources का उपयोग करें। पीईपीआई से स्थापित कुछ भी कम से कम एक संस्करण संख्या होना चाहिए।

>>> import pkg_resources 
>>> pkg_resources.get_distribution("blogofile").version 
'0.7.1' 
+8

यह भी ध्यान रखें कि, पैकेज नाम पीईपीआई प्रविष्टि का होना चाहिए। तो "pkg_resources.get_distribution ('MySQLdb') जैसे कुछ। संस्करण" काम नहीं करेगा लेकिन "pkg_resources.get_distribution ('mysql-python') संस्करण" होगा। – Rahul

+1

यदि आप एक पूर्ण फ़ाइल नाम के साथ चल रहे हैं, तो 'pkg_resources' एक अलग संस्करण चुन सकता है जिसे आप वास्तव में चल रहे हैं क्योंकि इसकी आपके' पायथनपथ 'या इसी तरह की उच्च प्राथमिकता है। – tripleee

+3

यदि कोई व्यक्ति जानना चाहता है कि '__version__' विशेषता कैसे बनाएं: http://stackoverflow.com/q/17583443/562769 –

2

आप

pip freeze 

का उपयोग आवश्यकताओं प्रारूप में इंस्टॉल किए गए पैकेज को देखने के लिए कर सकते हैं।

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