"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كم عدد حزم بايثون التي تم إصدارها بشكل صحيح؟

كم عدد حزم بايثون التي تم إصدارها بشكل صحيح؟

تم النشر بتاريخ 2024-11-08
تصفح:277

في أحد الأيام، بينما كنت أبحث في قاعدة بيانات عن الثغرات الأمنية في حزم بايثون، أدركت أن بعض إصدارات الحزم الموجودة هناك لا يمكن تحليلها بسهولة ومقارنتها بسلاسل الإصدارات الأخرى لأنها لم تلتزم بمعايير إصدار Python - إما PEP 440 القديم أو مواصفات محددات الإصدار التي حلت محله. لذلك بدأت أتساءل عن مدى شيوع هذا الأمر. كم عدد الحزم في مؤشر حزمة بايثون في الواقع لديها إصدارات صالحة؟

كانت الإجابة الواضحة: اذهب للتحقق. لذلك قمت بإنشاء بيئة افتراضية جديدة، وقمت بتنزيل الطلبات، وشرعت في كتابة برنامج نصي متعدد المعالجة للاستعلام عن واجهة برمجة تطبيقات PyPI حرفيًا كل سلسلة إصدار تستخدمها كل حزمة . لقد استغرق الأمر بضع ساعات حتى من العمل على جميع النوى، ولكن في النهاية كنت قد استعدت أكثر من 6,057,703 سلسلة إصدارات من 545,018 حزمة، مخزنة في قاعدة بيانات SQLite أنيقة. يمكنك العثور عليه على Kaggle.

بعد ذلك جاء التحليل. لقد وجدت مكتبتين وعدتا بالتحقق من صحة سلسلة الإصدار للامتثال:

  • Pepver: "تحليل وتفسير ومعالجة إصدار PEP-440"
  • parver: "يسمح parver بالتحليل والتلاعب بأرقام إصدارات PEP 440"

لاحظ أنه لكي نكون منصفين، لا يزال كلاهما ملتزمين بـ PEP-440، والذي تم استبداله الآن، لذلك سأضع ذلك في الاعتبار، خاصة عند النظر إلى السلاسل التي تم وضع علامة عليها على أنها غير متوافقة.

بعد ساعتين أخريين من المعالجة المتعددة المكثفة، قمت بتحديث قاعدة البيانات الخاصة بي بعمودين منطقيين يشيران إلى ما إذا تم تحليل السلاسل بنجاح مع هاتين الحزمتين (أيضًا على Kaggle).

النتائج

How many Python packages are versioned correctly?

للحصول على ملخص سريع للنتائج التي توصلت إليها:

  • من أصل 6،057،703 سلسلة إصدار، تم العثور على 5،542 (0.09٪) معيبة؛

  • من بين 545,018 حزمة، 1,285 (0.24%) بها سلسلة إصدار واحدة معيبة على الأقل.

لذا بشكل عام تبدو حالة المستودع صحية جدًا! سلاسل الإصدار التي وجدتها كلتا المكتبتين خاطئة هي من جميع الأنواع. يستخدم البعض ببساطة اللواحق بطريقة غير قياسية ولكن بشكل عام يتبع نموذج الإصدار الدلالي بينما يلتزم البعض الآخر فقط بالتجزئات أو سلاسل من الكلمات والأرقام.

الحالات التي تختلف فيها المكتبتان هي أكثر إثارة للاهتمام. هذه هي تلك التي لا يتحقق منها Pepver ولكن Parver يفعل:


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 وهو قانوني تمامًا.

في هذه الأثناء، إليك عينة عشوائية من الإصدارات التي يعترف بها Pepver ولكن لا يعترف بها Parver:


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


لديهم جميعًا ميل مشترك لاستخدام أرقام أخرى (أحيانًا تواريخ) بعد لاحقة التطوير، مع بعض الفواصل. وهذا بالفعل خطأ أيضًا، حيث أن المواصفات لا تسمح باستخدام الفاصل في هذه الحالة. لذا مرة أخرى يبدو بارفر على حق.

على أي حال، لقد أرضى ذلك فضولي الأصلي إلى حد كبير، وطمأنني أنه بالنسبة للغالبية العظمى من الحالات، ستكون الطرق القياسية للتحليل ومقارنة الإصدارات كافية. حتى بين الإصدارات غير القياسية، غالبًا ما يكون من السهل إلى حد ما تحديد الطلب، حيث تكون الانحرافات في حدها الأدنى. ومع ذلك، من المفيد أن تكون على دراية بجميع المراوغات الموجودة في الإصدار الرسمي، وأن تعرف متى يمكننا الاعتماد عليها أو لا يمكننا الاعتماد عليها.

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/stur86/how-many-python-packages-are-versioned-correctly-5l8?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3