दूसरे दिन, जब मैं पायथन पैकेजों में कमजोरियों के डेटाबेस को देख रहा था, मुझे एहसास हुआ कि वहां कुछ पैकेज संस्करणों को आसानी से पार्स नहीं किया जा सकता था और अन्य संस्करण स्ट्रिंग्स के साथ तुलना नहीं की जा सकती थी क्योंकि वे मानकों का पालन नहीं करते थे पायथन संस्करण - या तो पुराना पीईपी 440 या संस्करण विनिर्देशक विनिर्देश जिसने इसे प्रतिस्थापित किया। तो मैं सोचने लगा कि यह कितना सामान्य है। पायथन पैकेज इंडेक्स वास्तव में पर कितने पैकेजों के वैध संस्करण हैं?
स्पष्ट उत्तर था: जाकर जांचें। इसलिए मैंने एक नया वर्चुअल वातावरण बनाया, अनुरोध डाउनलोड किए, और वस्तुतः प्रत्येक पैकेज द्वारा उपयोग की जाने वाली प्रत्येक संस्करण स्ट्रिंग के लिए PyPI API को क्वेरी करने के लिए एक मल्टीप्रोसेसिंग स्क्रिप्ट लिखने के लिए आगे बढ़ा। सभी कोर पर चलने में भी मुझे कुछ घंटे लग गए लेकिन इसके अंत तक मैंने 545,018 पैकेजों से 6,057,703 से अधिक संस्करण स्ट्रिंग्स को पुनः प्राप्त कर लिया था, जो एक साफ SQLite डेटाबेस में संग्रहीत थे। आप इसे कागल पर पा सकते हैं।
अगला पार्सिंग आया। मुझे दो पुस्तकालय मिले जिन्होंने अनुपालन के लिए एक संस्करण स्ट्रिंग को मान्य करने का वादा किया था:
ध्यान दें कि ईमानदारी से कहें तो ये दोनों अभी भी PEP-440 से चिपके हुए हैं, जिसे अब बदल दिया गया है, इसलिए मैं इसे ध्यान में रखूंगा, खासकर जब गैर-अनुपालक के रूप में चिह्नित स्ट्रिंग्स को देख रहा हूं।
कुछ घंटों की गहन मल्टीप्रोसेसिंग के बाद मैंने अपने डेटाबेस को दो बूलियन कॉलम के साथ अपडेट किया था जो दर्शाता है कि क्या स्ट्रिंग इन दो पैकेजों (कागल पर भी) के साथ सफलतापूर्वक पार्स हो गई है।
मेरे निष्कर्षों के त्वरित सारांश के लिए:
6,057,703 संस्करण स्ट्रिंग्स में से, 5,542 (0.09%) दोषपूर्ण पाए गए;
545,018 पैकेजों में से 1,285 (0.24%) में कम से कम एक दोषपूर्ण संस्करण स्ट्रिंग थी।
तो कुल मिलाकर रिपॉजिटरी की स्थिति काफी अच्छी लगती है! दोनों पुस्तकालयों द्वारा गलत पाए गए संस्करण स्ट्रिंग सभी प्रकार के हैं। कुछ लोग केवल गैर-मानक तरीके से प्रत्ययों का उपयोग करते हैं, लेकिन कुल मिलाकर सिमेंटिक वर्जनिंग प्रतिमान का पालन करते हैं, जबकि अन्य केवल शब्दों और संख्याओं के प्रतिबद्ध हैश या स्ट्रिंग हैं।
वे मामले जहां दो पुस्तकालय असहमत हैं, अधिक दिलचस्प हैं। ये वे हैं जिन्हें पेपवर मान्य नहीं करता है लेकिन पार्वर करता है:
0.0.2.R 0.0.2.R3 0.0.2.R4 0.0.2.R5 0.0.2.R6 0.0.2.R7
इस मामले में, मैं कहूंगा कि पेपर ग़लत है। PEP440 और वर्तमान संस्करण नियमों के अनुसार, r पोस्ट-रिलीज़ टैग (पोस्ट करने के लिए मानकीकृत) के लिए एक स्वीकार्य वर्तनी है, और अक्षर केस-असंवेदनशील हैं। तो प्रभावी रूप से 0.0.2.R3 0.0.2.post3 पर सामान्य हो जाता है और पूरी तरह से कानूनी है।
इस बीच, यहां उन संस्करणों का एक यादृच्छिक नमूना दिया गया है जिन्हें पेप्वर स्वीकार करता है लेकिन पार्वर नहीं करता है:
0.0.1dev-20141025 1.5.0-dev-618 0.3.4.dev.20180830 1.15.0-dev-1552 1.4.0-dev-510 0.0.9.dev-20121012 0.2dev-20101203 0.3.4.dev.20180905 1.15.0-dev-1606 0.2.1dev-20110627 1.12.0-dev-1379 1.1.1-dev-275 1.3.1-dev-427
उन सभी में देव प्रत्यय के बाद कुछ विभाजक के साथ अन्य संख्याओं (कभी-कभी तिथियों) का उपयोग करने की प्रवृत्ति समान होती है। यह वास्तव में गलत भी है, क्योंकि विनिर्देश इस मामले में विभाजक की अनुमति नहीं देता है। तो फिर से पार्वर सही लगता है।
वैसे भी, इसने मेरी मूल जिज्ञासा को काफी हद तक संतुष्ट किया, और मुझे आश्वस्त किया कि अधिकांश मामलों के लिए, संस्करणों को पार्स करने और तुलना करने के मानक तरीके पर्याप्त होंगे। यहां तक कि गैर-मानक संस्करणों के बीच भी किसी ऑर्डर की पहचान करना अक्सर काफी आसान होता है, क्योंकि विचलन न्यूनतम होते हैं। फिर भी, आधिकारिक संस्करण की सभी विचित्रताओं से अवगत होना और यह जानना उपयोगी है कि हम उन पर कब भरोसा कर सकते हैं या नहीं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3