العثور على مجموعة الأدوات المثالية: تحليل قوالب مشروع Python الشائعة

المادة ، التي ننشر ترجمتها اليوم ، مخصصة للقصة حول الأدوات المستخدمة لإنشاء تطبيقات Python. وهي مصممة للمبرمجين الذين تركوا بالفعل فئة المبتدئين ، لكنهم لم يصلوا بعد إلى فئة مطوري Python ذوي الخبرة. بالنسبة لأولئك الذين لا يستطيعون الانتظار لبدء الممارسة ، يقترح المؤلف استخدام Flake8 و pytest و Sphinx في مشاريع Python الحالية . ويوصي أيضا نظرة على ما قبل ارتكاب ، الأسود، و Pylint . أولئك الذين يخططون لبدء مشروع جديد ، ينصح بالاهتمام بالشعر و Dependabot .





نظرة عامة


لطالما كان من الصعب بالنسبة لي تكوين رأي موضوعي حول "أفضل الممارسات" لتطوير Python. في عالم التكنولوجيا ، تظهر بعض الاتجاهات الشائعة باستمرار ، وغالبًا ما تكون غير موجودة لفترة طويلة. وهذا يعقد استخراج "الإشارة المفيدة" من ضوضاء المعلومات.

غالبًا ما تكون الأدوات الطازجة جيدة فقط ، إذا جاز التعبير ، على الورق. هل يمكنهم حقًا مساعدة المبرمج العملي في شيء ما؟ أم أن تطبيقهم يؤدي فقط إلى إدخال شيء جديد في المشروع ، يجب الحفاظ على كفاءته ، والذي ينطوي على صعوبات أكثر من الفوائد؟

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

بدا لي أنه كان من المثير للاهتمام للغاية معرفة ما هي الأدوات المساعدة التي يعتبرها مؤلفو القوالب جديرة بإدخال هذه الأدوات في مشاريع Python الجديدة التي تم إنشاؤها على أساس هذه القوالب.

لقد قمت بتحليل ومقارنة أكثر 18 مشروعًا نموذجيًا (من 76 إلى 6300 نجمة على GitHub) ، مع إيلاء اهتمام خاص لنوع الأدوات المساعدة التي يستخدمونها. يمكن العثور على نتائج هذا التحليل في هذا الجدول.

أدناه أريد أن أشارك الاستنتاجات الرئيسية التي توصلت إليها أثناء تحليل القوالب الشعبية.

المعايير الواقعية


يتم تضمين الأدوات التي تمت مناقشتها في هذا القسم في أكثر من نصف القوالب. هذا يعني أنه يُنظر إليها كمعيار في عدد كبير من مشاريع Python الحقيقية.

فليك 8


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

نعم ، هذا ليس مفاجئًا. من الصعب معارضة شيء ما لراحة إبطال قاعدة التعليمات البرمجية الكاملة للمشروع في ثوانٍ. يمكن لأولئك الذين يرغبون في استخدام أحدث التطورات أن يلقوا نظرة على دليل wemake-python-style . هذا شيء مثل "Flake8 على المنشطات". قد تساهم هذه الأداة أيضًا في الانتقال إلى فئة الأدوات المشابهة الأخرى القديمة (مثل Pylint).

ytPytest و Cover.py


تستخدم الغالبية العظمى من القوالب pytest . هذا يقلل من استخدام إطار الاختبار القياسي unittest. تبدو Pytest أكثر جاذبية عند دمجها مع السموم . هذا بالضبط ما تم القيام به في حوالي نصف القوالب. غالبًا ما يتم التحقق من تغطية الشفرة بالاختبارات باستخدام cover.py .

phSphinx


تستخدم معظم القوالب أبو الهول لتوليد الوثائق . لدهشتي ، نادرا ما يستخدم MkDocs لهذا الغرض.

نتيجة لذلك ، يمكننا القول أنه إذا لم تستخدم Flake8 و pytest و Sphinx في مشروعك الحالي ، فعليك التفكير في تقديمها.

أدوات واعدة


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

ypPyproject.toml


pyproject.tomlيُقترح استخدام الملف في PEP 518 . هذه آلية حديثة لتحديد متطلبات تجميع المشروع. يتم استخدامه في معظم قوالب الشباب إلى حد ما.

oالشعر


على الرغم من أن نظام Python البيئي ليس جيدًا من حيث أداة جيدة لإدارة التبعيات ، إلا أنني ، بتفاؤل حذر ، أعتقد أن الشعر يمكن أن يصبح نظيرًا لـ npm من عالم JavaScript في عالم Python .

يبدو أن أصغر قوالب المشاريع (ولكن مع ذلك شائعة) تتوافق مع فكرة ملكي. صحيح أنه يجدر القول أنه إذا كان شخص ما يعمل على نوع من المكتبات يمكنه التخطيط لتوزيعها من خلال PyPI ، فسيظل عليه استخدام أدوات الإعداد . (تجدر الإشارة إلى أنه بعد نشر هذه المواد ، أُبلغت أن هذا ، على ما يبدو ، لم يعد مشكلة).

أيضًا ، كن حذرًا إذا كان مشروعك (الشيء نفسه ينطبق على التبعيات) يعتمد على Conda. في هذه الحالة، سوف الشعر لا تناسبك، لأن هذه الأداة، في شكله الحالي، يلزم المطور ل نقطة و virtualenv .

ependDependabot


تقوم Dependabot بفحص تبعيات المشروع بانتظام لتقادمها وتحاول مساعدة المطور عن طريق فتح العلاقات العامة تلقائيًا.

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

نتيجة لذلك ، أنصحك بعدم إغفال الشعر و Dependabot. ضع في اعتبارك إدخال هذه الأدوات في مشروعك القادم.

توصيات شخصية


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

-الالتزام المسبق


حتى إذا كنت منضبطًا للغاية - لا تهدر طاقتك على تنفيذ إجراءات روتينية بسيطة مثل رمز إضافي يتم تشغيله عبر اللنتر قبل إرسال الرمز إلى المستودع. يمكن تمرير مهام مماثلة إلى مرحلة ما قبل الالتزام . ومن الأفضل إنفاق طاقتك على TDD والعمل الجماعي على التعليمات البرمجية.

▍صورة


على الرغم من انتقاد Pylint لكونها بطيئة ، على الرغم من أن هذه الأداة تنتقد بسبب ميزات إعداداتها ، إلا أنني أستطيع أن أقول إنها سمحت لي بالنمو فوق نفسي في مجال البرمجة.

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

▍أسود


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

في حالتي ، هذا يضيء ما لا يعجبني شخصيًا في Python (الحاجة إلى استخدام الكثير من المساحات). علاوة على ذلك ، تجدر الإشارة إلى أن مشروع Black في عام 2019 انضم إلى مؤسسة Python Software Foundation ، مما يشير إلى جدية وجودة هذا المشروع.

نتيجة لذلك ، أود أن أقول أنه إذا كنت لا تزال لا تستخدم ما قبل الالتزام ، Black و Pylint - فكر فيما إذا كانت هذه الأدوات يمكن أن تفيد فريقك.

المجاميع الفرعية


تم إنشاء اثني عشر من النماذج الثمانية عشر التي تم التحقيق فيها باستخدام إطار عمل قالب الطهي . بعض تلك القوالب التي لا يستخدم فيها هذا الإطار لها صفات مثيرة للاهتمام.

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

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

وإذا كنت منجذبًا إلى المغامرة - قم بإنشاء القالب الخاص بك من البداية. يعد Cookiecutter ميزة رائعة في نظام Python البيئي ، وتتيح لك العملية البسيطة لإنشاء قوالب Jinja القيام بشيء ما بسرعة وسهولة.

المكافأة: توصيات القالب


angDjango


جنبا إلى جنب مع قوالب Django الأكثر شعبية ، فكر في استخدام قالب wemake-django . يعطي الانطباع عن منتج مدروس بعمق.

processing معالجة وتحليل البيانات


يعد قالب Cookiecutter Data Science مفيدًا في معظم المشاريع التي تهدف إلى معالجة البيانات وتحليلها . ومع ذلك ، يجب على علماء البيانات أيضًا النظر إلى Kedro .

يمد هذا القالب Cookiecutter Data Science بآلية لإنشاء خطوط أنابيب معالجة بيانات قياسية. يدعم تحميل وحفظ البيانات والنماذج. من المحتمل جدًا أن تتمكن هذه الميزات من العثور على تطبيق جدير بالمشروع التالي.

هنا أود أيضًا أن أعرب عن امتناني لمبدعي نموذج shablona لإعداد وثائق عالية الجودة. يمكن أن يكون مفيدًا لك حتى إذا انتهى بك الأمر إلى اختيار شيء آخر.

plates قوالب للأغراض العامة


يعتمد أي قالب للأغراض العامة للاختيار بطريقة ما على ما ستقوم بالضبط بتطويره بناءً على هذا القالب - مكتبة أو تطبيق عادي. ولكن ، باختيار مثل هذا القالب ، إلى جانب المشاريع الأكثر شيوعًا من هذا النوع ، أود أن أنظر بعناية شديدة إلى قالب Python من Jace .

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

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

في ما يلي نموذجان يستخدمان تقنية GitHub Actions:

  1. إن قالب Pyiecon Best Practices Cookiecutter ، الذي أود أن أشير إليه ، يحتوي على معظم أدواتي المفضلة.
  2. إن قالب Blueprint / Boilerplate For Python Projects ، الذي أجده مثيرًا للاهتمام ، حيث أن الفرصة التي يتيحها لهم للعثور على مشاكل أمنية مشتركة مع Bandit ، تبدو واعدة. بالإضافة إلى ذلك ، يحتوي هذا القالب على ميزة رائعة ، والتي تتكون في حقيقة أن إعدادات جميع الأدوات يتم جمعها في ملف واحد setup.cfg.

وأخيرًا - أوصي بإلقاء نظرة على قالب حزمة wemake-python-package . أعتقد أنه يستحق القيام بذلك على أي حال. على وجه الخصوص - إذا كنت تحب قالب Django من نفس المطور ، أو إذا كنت ستستخدم دليل wemake-python-styleguide المتقدم بدلاً من Flake8 النقي.

ملخص


بعد أن نشرت هذا المقال ، كتبت عن Guido van Rossum.

ربما أنت ، مثلي ، ستهتم بتعليقه . قال إنني نسيت أمر الغموض ، وأنه من الأسهل العمل مع أبو الهول ، ولكن مع ماركداون. فيما يتعلق بالأسود ، أشار إلى أن هذه الأداة مبالغ فيها ولا يمكن الاستفادة منها إلا إذا جادل أعضاء الفريق كثيرًا في الأساليب. وفقا له ، أولئك الذين يستخدمون Flake8 لا يحتاجون إلى Pylint. لم يسمع عن الشعر و Dependabot. بالإضافة إلى ذلك ، نصح باستخدام حل CI معين ، مثل Travis-CI ، لإجراء الاختبارات.

القراء الأعزاء! ما قوالب مشروع Python التي تستخدمها؟


All Articles