إن المادة ، التي نُنشر ترجمتها اليوم ، مكرّسة للأدوات التي تسمح بتزويد مشاريع بيثون بتنسيق الكود والاختبار والتكامل المستمر وأدوات تحليل التبعية. هذا يساعد على تسريع عملية التطوير ، ويساعد على تحسين جودة وتوحيد وأمن الكود. من المفترض أن قارئ هذه المادة لديه بالفعل بعض الخبرة في تطوير بيثون ومشروع بيثون الذي سيختبره أثناء القراءة. إذا لم يكن لديك مثل هذا المشروع ، فيمكنك
هنا معرفة كيفية إعداد بيئة تطوير وإنشاء حزمة Python. يتم إعداد الأمثلة التي سيتم تقديمها هنا باستخدام macOS و Python 3.7.

الخطوة 1. تثبيت الأسود
يجب أن يتبع رمز المشروع اصطلاحات نمط الرمز.
Black عبارة عن حزمة Python تقوم تلقائيًا بتنسيق الكود ، وبذلك يصل مظهره إلى معيار
PEP 8 . يعد Black مشروعًا جديدًا نسبيًا ، لكنه اكتسب بالفعل أكثر من مليون عملية تنزيل. سرعان ما أصبح استخدامه علامة على الذوق السليم في تطوير بيثون.
هنا هو دليل الأسود.
أنا كمحرر للرموز ، استخدم Atom ، لذلك أضفت حزمة
Python-Black
إلى Atom. يمكنك معرفة كيفية تثبيته
هنا . بعد تثبيت هذه الحزمة ، ستقوم Atom بإعادة تهيئة الكود بعد حفظ الملف.
بينما نتحدث عن Black - دعنا نجهز هذه الأداة ببيئة التطوير لأولئك الذين يعملون معنا في المشروع. نتيجةً لذلك ، سيستخدم كل شخص يعمل في المشروع قواعد تنسيق التعليمات البرمجية نفسها ، وإلا لن يتم قبول طلبات السحب الخاصة بهم.
أضف
black==18.9b0
إلى أول سطر مجاني تم العثور عليه من ملف
requirements_dev.txt
وقم بتشغيل الأمر
install -r requirements_dev.txt
.
الأسود ، بشكل افتراضي ، يعين طول سطر الشفرة إلى 88 حرفًا. تتطلب بعض أدلة الأنماط ، مثل
Sphinx ، طول سلسلة من 79 حرفًا. في إعدادات حزمة
Black-Atom
، يمكنك ضبط طول الخط المطلوب.
الآن بعد أن حصلنا على أداة من شأنها أن تساعد في توفير الوقت في تنسيق الكود ، سنفكر في كيفية تسريع وتبسيط إرسال الشفرة إلى PyPI.
الخطوة 2. إنشاء ملف .pypirc
عند استخدام البرمة لإرسال تجميعات التطبيق إلى TestPyPI و PyPI ، يجب إدخال معلومات تسجيل الدخول يدويًا. إذا لم تكن معتادًا على البرمة ، فقم بإلقاء نظرة على
هذه المادة. الآن سنقوم أتمتة هذه العملية.
يمكن أن تعمل البرمة مع ملف
.pypirc
، والذي يجب أن يكون في دليلنا الرئيسي. تأخذ هذه الأداة ، التي تفريغ البيانات ، عنوان URL واسم المستخدم وكلمة المرور من ملف معين.
لذلك ، قم بإنشاء ملف
.pypirc
في
.pypirc
الرئيسي:
touch ~/.pypirc
أضف النص التالي إليه:
[distutils] index-servers = pypi testpypi [testpypi] repository: https://test.pypi.org/legacy username = your_username password = your_pypitest_password [pypi] username = your_username password = your_pypi_password
من الواضح أنه يجب عليك هنا إدخال اسم المستخدم وكلمة المرور الحقيقية. تحقق أيضًا من حفظ هذا الملف في الدليل الرئيسي وليس في دليل العمل الحالي. إذا كنت ترغب في حماية هذا الملف من المستخدمين الآخرين ، فيمكنك ، باستخدام أدوات سطر الأوامر ، تكوين أذوناته:
chmod 600 ~/.pypirc
الآن يمكن تحميل الحزمة الخاصة بك في TestPyPI باستخدام الأمر التالي:
twine upload -r testpypi dist/*
في PyPI العادي ، يمكنك تحميل حزم مثل هذا:
twine upload dist/*
بعد الحصول على ملف
.pypirc
، لم تعد مضطرًا إلى إدخال اسم المستخدم وكلمة المرور يدويًا.
الآن ، دعونا نضيف أدوات اختبار إلى بيئة التطوير الخاصة بنا والتي ستتيح لنا التحقق من التشغيل الصحيح للحزمة التي نقوم بإنشائها.
الخطوة 3. تثبيت وتكوين pytest
Pytest هي
مكتبة الأكثر شعبية وسهلة الاستخدام لاختبار رمز مكتوب في بيثون. في هذا المثال ، سنضيف اختبارات بسيطة إلى المشروع.
الآن ، إذا كنت مهتمًا بتفاصيل pytest ، فهو دليل تمهيدي جيد لهذه الأداة.
إضافة تفاصيل pytest إلى
requirements_dev.txt
:
pytest==4.3.0
لنقم بتثبيت الحزمة:
pip install requirements_dev.txt
الآن قم بتنفيذ الأمر التالي ، والذي سيتيح لـ pytest العثور على الحزمة الخاصة بنا:
pip install -e .
إذا قمت بإلغاء تنشيط بيئة التطوير الافتراضية ، فستحتاج إلى تشغيل كلا الأمرين
pip
مرة أخرى لتشغيل الاختبارات.
الخطوة 4. إنشاء الاختبارات
أضف مجلد
test
إلى الدليل الجذر لمشروعك. ضع الملف
test_your_package_name.py
فيه. ملفي يسمى
test_notebookc.py
. إذا كان اسم الملف يبدأ بـ
test_
، فيمكن لل pytest اكتشاف مثل هذا الملف تلقائيًا.
أضفت الاختبار التالي إلى ملف
test_notebookc.py
، والذي يهدف إلى التحقق مما إذا كانت الوظيفة تعرض الاسم الصحيح. قم بتعديل هذا الرمز بحيث تتطابق أسماء الملفات والوظيفة المستخدمة فيه مع الاختبارات الخاصة بك.
"""Tests for `notebookc` package.""" import pytest from notebookc import notebookc def test_convert(capsys): """Correct my_name argument prints""" notebookc.convert("Jill") captured = capsys.readouterr() assert "Jall" in captured.out
ما الذي يحدث هنا؟
أولاً نستورد وحدتنا هنا. ثم نقوم بإنشاء دالة تم تصميم اسمها وفقًا للقالب
test_my_function_name
. تسمح اصطلاح تسمية الوظائف للأشخاص الآخرين الذين يقرؤون رمز مشروعك بفهم ما الذي يتم اختباره بالضبط في الاختبارات. بالإضافة إلى ذلك ، يعد هذا ضروريًا لحزمة تساعد في التحكم في تغطية التعليمات البرمجية مع الاختبارات ، والتي سنناقشها أدناه.
بعد ذلك ، نسميها الدالة (
convert
) ، ونطلق عليها اسم
Jill
كوسيطة. التالي - التقاط ما يعرض وظيفة. هنا تجدر الإشارة إلى أن الوظيفة المعنية بسيطة للغاية. تأخذ المعلمة
my_name
وتقوم بما يلي:
print(f"I'll convert a notebook for you some day, {my_name}.")
يتحقق Pytest لمعرفة ما إذا كان
Jall
في ما تقوم به الوظيفة. هذا الخط لا ينبغي أن يكون هناك ، لأننا نمر وظائف
Jill
.
هنا هو وثائق pytest حيث يمكنك العثور على معلومات حول اعتراض الإخراج.
قم بإجراء الاختبار عن طريق كتابة
pytest
في موجه الأوامر. يجب أن يفشل هذا الاختبار. يتم عرض معلومات الخطأ باللون الأحمر.
تم اكتشاف خطأ أثناء الاختبار.يوصى بفحص الاختبارات للتأكد من صحتها ووصفها بحيث تنتهي في ظل ظروف معينة بخطأ ما. يجب ألا تكتب الاختبارات التي تعطي رسائل خضراء فقط ، وإلا فقد يتبين أن الاختبارات لا تتحقق مطلقًا من ما تمت كتابته للتحقق منه.
بعد التأكد من فشل الاختبار ، قم بتغيير عبارة
Jall
إلى
Jill
وقم بإجراء الاختبار مرة أخرى. الآن يجب أن تكتمل بنجاح.
الانتهاء بنجاح من الاختبار.الآن كل شيء على ما يرام. يسمح لك الاختبار بالتأكد من أنه إذا قام شخص ما بتمرير خط إلى وظيفتنا ، فسوف يقع هذا السطر في النص الذي تعرضه هذه الوظيفة.
يمكنك أيضًا كتابة اختبار يتحقق من الوظيفة حول كيفية تعاملها مع البيانات التي تم تمريرها إليها. وهي ، إذا استلمت بيانات يختلف نوعها عن السلسلة ، فينبغي أن تتسبب في حدوث خطأ TypeError.
إليك بعض الأشياء الجيدة المتعلقة بالاستثناءات ومعالجة الأخطاء في Python.
عندما أنشأنا الاختبار السابق ، كتبنا رمزًا يؤدي إلى إكمال الاختبار بنجاح. وهذا ما يسمى تطوير يحركها اختبار (TDD). TDD هو أسلوب برمجي مثبت يساعدك على كتابة التعليمات البرمجية التي تحتوي على أخطاء أقل مما تفعل بدون TDD.
وهنا بعض المواد TDD مفيدة.
الآن ، كتمرين ، حاول كتابة اختبار يتحقق من وظيفة
convert()
بحيث أنه عند تمرير شيء مختلف عن السلسلة إليه ، سوف يلقي خطأً ، ويطبق الآليات المناسبة لهذه الوظيفة. لاحظ أنه يتم تحويل الأعداد الصحيحة والقوائم والقواميس إلى سلاسل.
بعد اجتياز الحزمة الاختبارات بنجاح ، نحن على استعداد للاستفادة من نظام التكامل المستمر.
الخطوة 5. التسجيل في خدمة Travis CI وتكوينها
Travis CI هي "خدمة ويب موزعة للبناء واختبار البرمجيات." تم شراؤها مؤخرًا بواسطة
Idera . هناك أنظمة تكامل مستمرة أخرى ، لكن Travis CI أداة شائعة ومفتوحة المصدر وموثقة جيدًا ، لذلك سنستخدمها.
يتيح لك Travis CI أن تدمج في مشروعك فقط الكود الذي يجتاز الاختبارات ويلبي المعايير.
هنا يمكنك قراءة المزيد حول Travis CI ، وهنا حول
التكامل المستمر.
قم بإنشاء حساب على
https://travis-ci.org/ . بعد ذلك ، انقر فوق الرابط
Review and add your authorized organizations
على صفحة الملف الشخصي. ستتم مطالبتك بكلمة مرور للوصول إلى GitHub. انقر على
Grant
في قسم
Organization access
.
قم بإعداد حساب Travis CIكنت بحاجة إلى مزامنة الحساب لكي تظهر المعلومات حول
notebooktoall
notebookc
ومستودع
notebookc
في الحساب. عادة ، لكي يعمل Travis CI مع الكود ، يستغرق الأمر حوالي دقيقة. بعد ذلك ، تحتاج إلى تنشيط المستودع باستخدام المفتاح الموضح في الشكل التالي.
تنشيط المستودعالآن انقر على زر
Settings
. هنا تحتاج إلى الإشارة إلى ما إذا كان يمكن إنشاء ترافيس بناءً على طلبات السحب أو الفروع المرسلة إلى المستودع.
إعداد بناء المشروعلقد حان الوقت الآن لإعداد المشروع الذي نعمل عليه ، مما سيمكّن Travis من بناء المشروع لكل طلب سحب.
الخطوة 6. إنشاء ملف .travis.yml
في مجلد جذر المشروع ، قم بإنشاء ملف
.travis.yml
بالمحتويات التالية:
dist: xenial language: python python: 3.7.2 install: - pip install -r requirements_dev.txt - pip install -e . script: - pytest
dist: xenial
لإخبار Travis باستخدام Ubuntu Xenial 16.04 لتنظيم البيئة الافتراضية. لاختبار Python 3.7 code ، هناك حاجة إلى Ubuntu Xenial ، ويمكن الاطلاع على تفاصيل حول هذا الأمر
هنا .
يتيح لك قسم التثبيت تثبيت الحزم المستخدمة في تطوير المشروع.
pip install -e .
command ينفذ تركيب الحزمة الخاصة بنا في بيئة ترافيس الافتراضية. بعد ذلك ، سيتمكن Travis ، بدءًا من pytest ، من العثور على الحزمة الخاصة بنا.
الخطوة 7. اختبار في Travis CI
ارتكب التغييرات ، قدمها إلى GitHub ، قم بعمل العلاقات العامة. يجب أن يبدأ العمل Travis في غضون ثوان.
ترافيس في العملهذا ما يفعله ترافيس في التعامل مع المشروع.
الإجراءات التي يقوم بها ترافيس أثناء معالجة المشروعإذا لم تنجح العلاقات العامة - سيقوم ترافيس بالإبلاغ عنها. يرجى ملاحظة أنه في حالة عدم نجاح طلب السحب ، يمكنك إرسال التغييرات إلى نفس الفرع وسيبدأ Travis العمل تلقائيًا.
انتقل إلى صفحة المستودع الخاصة بك على موقع ترافيس ونظر حولك هناك. هنا يمكنك أن تجد الكثير من الأشياء المثيرة للاهتمام حول الجمعيات. ربما في المستقبل سوف تصبح ضيفًا متكررًا لهذه الصفحة عندما تحاول فهم سبب التجميع الفاشل.
إذا افترضنا أن كل شيء سار بشكل جيد ، وإذا كانت الصفحة تحتوي على علامات خضراء ، فإن التحقق من المشروع وتجميعه كانا ناجحين.
تم الانتهاء من تجميع المشروع بنجاحإذا لم تكن هناك علامات خضراء أو حمراء على الصفحة ، فافتح قائمة
More options
وحدد
Requests
. إذا رأيت رسائل خطأ حمراء هنا ، فقم بتحليلها. إذا رأيت أن
Build config file is required
، فهذا يعني أن Travis لا يمكنه العثور على ملف
.travis.yml
في مستودع التخزين. قم بتصحيحه وسيختفي الخطأ.
يرسل Travis المستخدمين رسائل البريد الإلكتروني في الحالات التي يكون فيها تجميع المشروع غير ناجح ، وفي الحالات التي يكون من الممكن فيها إصلاحها.
تذكر أنه يمكنك إرسال تعهدات لفتح العلاقات العامة وسيعيد Travis تلقائيًا عملية بناء المشروع.
الآن دعونا نحلل مشروعنا لتغطية الشفرة مع الاختبارات.
الخطوة 8. تقييم تغطية الرمز مع الاختبارات
يتيح لك تقرير تغطية الشفرة مع الاختبارات معرفة أي جزء من رمز المشروع ، وإن كان صغيرًا ، تم اختباره. لإنشاء مثل هذه التقارير ، سوف نستخدم حزمة
pytest-cov .
أضف السطر التالي إلى الملف
requirements_dev.txt
:
pytest-cov==2.6.1
قم بتشغيل الأمر التالي:
pytest --cov=my_project_name
في حالتي ، بعد تنفيذ
pytest --cov=notebookc
، تم عرض التقرير التالي.
تقرير تغطية الكودكما اتضح فيما بعد ، يتم توفير جميع رمز المشروع مع الاختبارات. من السهل جدًا تحقيق هذه المؤشرات إذا كان المشروع بأكمله يتكون من عدة سطور من التعليمات البرمجية.
الآن دعنا نتحدث عن أداة تتيح لك الاحتفاظ بسجل عام لحالة المشروع من حيث تغطية الكود الخاص به مع الاختبارات.
الخطوة 9. استخدام المعاطف
يسمح لك مشروع Coveralls بالحفاظ على معلومات تاريخية حول تغطية الشفرة مع الاختبارات.
المآزرللاستفادة من إمكانيات هذا المشروع ، تحتاج إلى التسجيل على الموقع
https://coveralls.io/ باستخدام بيانات حساب GitHub الخاص بك. ثم تحتاج إلى توصيل مستودع.
في ملف
requirements_dev.txt
، أضف
coveralls==1.6.0
في السطر
coveralls==1.6.0
. بالمناسبة ، يجب أن يبدو هذا الملف في هذه المرحلة من العمل في المشروع كما يلي:
pip==19.0.3 wheel==0.33.0 twine==1.13.0 pytest==4.3.0 pytest-cov==2.6.1 coveralls==1.6.0
.travis.yml
ملف
.travis.yml
يبدو
.travis.yml
(في حالتك ، سيكون اسم مشروعك هنا):
dist: xenial language: python python: 3.7.2 install: — pip install -r requirements_dev.txt — pip install -e . script: — pytest --cov=my_package_name after_success: — coveralls
الآن ، عندما يقوم ترافيس ببناء المشروع ، سيقوم بتثبيت الحزم اللازمة وإجراء الاختبارات وإنشاء تقرير عن تغطية الرمز مع الاختبارات. ثم سيتم إرسال هذا التقرير إلى خدمة المآزر.
ارتكب ، أرسل الكود إلى جيثب ، وشاهد ما يحدث. قد يستغرق الأمر بضع دقائق حتى يدخل تقرير اختبار تغطية الشفرة إلى المعاطف.
تجهيز المشروع ، تقرير تغطية الاختبارالآن ، من بين اختبارات العلاقات العامة ، هناك أيضًا فحص يقوم به Coveralls.
في صفحة المعاطف ، يمكنك التحقق من أن المشروع مغطى بنسبة 100٪ في الاختبارات.
اختبار معلومات التغطيةالآن لنزود مشروعنا بأداة أخرى مفيدة.
الخطوة 10. العمل مع PyUp
تسمح خدمة PyUp.io للمطور بمعرفة ما إذا كانت التبعيات المستخدمة من قبله قديمة وما إذا كانت بها نقاط ضعف. تنفذ هذه الخدمة تلقائيًا طلبات السحب التي تهدف إلى تحديث الحزمة على جيثب. للاستفادة من إمكانيات هذا المشروع ، تحتاج إلى التسجيل باستخدام حساب GitHub ، على موقعها على الويب -
https://pyup.io/ . عند إضافة مستودع ، يوصى بتعيين "
Update Schedules
على
every week
. باستخدام هذا النهج ، إذا كان لمشروعك العديد من التبعيات ، فلن تواجه الكثير من طلبات السحب.
تكوين التحديثاتإليك ما تبدو عليه معلومات الحزمة ، بعضها قديم ، على موقع PyUp.io.
حزمة التفاصيلباستخدام هذه الخدمة ، ستعرف دائمًا متى تظهر أحدث إصدارات الحزم التي تستخدمها. المعرفة ، كما يقولون ، هي نصف النصر. والنصف الثاني هو ، بطبيعة الحال ، طلبات السحب التلقائي لتحديث التبعيات.
النتائج
في هذه المقالة ، تعلمت كيفية استخدام أدوات مثل Black و pytest و Travis CI و Coveralls و PyUp عند تطوير مشروعات Python. فهي تساعد في التحكم في تبعيات المشروع وتنسيقه واختباره ، والتحقق من المشروعات وإنشائها. نأمل أن تجد هذه الأدوات مفيدة.
أعزائي القراء! ما هي الأدوات التي تستخدمها عند تطوير مشاريع بايثون؟
