اعتماد أفضل على Python أثناء تجميع مشروعك

كنت أطهو فكرة موضوع المدونة هذه لفترة طويلة. لقد قمت بالكثير من البحث والقراءة والمحاولة أثناء العمل في مشاريع مختلفة. ولكن حتى اليوم بعد نشره ، لا أعتقد أنني راضٍ بنسبة 100٪ عن الحل المقدم حول كيفية إدارة تبعيات مشروع Python بكفاءة.

ما هي إدارة الحزمة والتبعية؟

البرامج التي تم طرحها في حزم مجمعة بهذه الطريقة يسهل إدارة البرامج المثبتة.

مدير الحزم عبارة عن مجموعة من المكتبات التي يتم تجميعها معًا ، مما يسهل تنزيل الحزمة بأكملها بدلاً من تنزيل كل مكتبة.

تحتوي كل مكتبة في الحزمة تقريبًا على تبعية يديرها مدير التبعية.

تساعد

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

كل لغة برمجة لها نكهة مدير التبعية.

لتلخيص كل ما سبق:

طريقة نموذجية لإدارة تبعية المشروع اليوم

اليوم مدير حزم Python الأكثر استخدامًا هو pip ، المستخدم لتثبيت وإدارة حزم برامج Python ، الموجودة في Python Package Index. يساعدنا Pip ، مطوري Python ، على التحكم “يدويًا” في التثبيت ودورة حياة حزم Python المتاحة للجمهور من مستودعاتهم عبر الإنترنت.

يمكن لـ Pip أيضًا ترقية تبعيات المشروع وإظهارها وإلغاء تثبيتها ، وما إلى ذلك.

لتثبيت الحزمة ، يمكنك فقط تشغيل pip install & lt؛ somepackage & gt؛ التي ستنشئ مكتبة Python إضافية في دليلك الرئيسي.

يمكن أن يساعد تشغيل تجميد النقطة ، في التحقق من الحزم المثبتة وإصدارات الحزم المدرجة في الترتيب المصنف غير الحساس لحالة الأحرف.

إعداد المشروع

بعد بناء التطبيق الخاص بك ، سوف تحتاج إلى تنفيذ مجموعة من الإجراءات (الخطوات) لإتاحة تبعيات التطبيق في البيئات المختلفة.

ستكون الإجراءات مشابهة للإجراء أدناه:

تثبيت تبعيات المشروع

عندما تريد مشاركة المشروع مع بقية العالم ، فستحتاج إلى تثبيت التبعيات عن طريق تشغيل $ pip install -r requirements.txt

للعثور على مزيد من المعلومات حول الحزم الفردية من Requiements.txt ، يمكنك استخدام $ pip show & lt؛ packagename & gt ؛. ولكن ما مدى إفادة الناتج؟

كيف يمكن الحفاظ على تبعيات المشروع بسهولة؟

شخصيًا ، أعتقد أنه ليس من السهل الحفاظ على الإعداد أعلاه ، وذلك لعدة أسباب:

هل هناك بدائل أفضل؟

الخيار 1: عدة ملفات requirements.txt؟

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

هل تعد requirements.txt المتعددة حلاً جيدًا لإدارة تبعيات المشروع؟ لا أوافق … لا تعد إدارة ملفات المتطلبات المختلفة. txt يدويًا حلاً جيدًا ، ولن يكون الأمر سهلاً إذا زاد عددها عن 50 سطرًا تقريبًا.

الخيار 2: هل تستطيع Pipreqs و Pipdeptre تحسينها؟

لقد جربت مؤخرًا الأداة المساعدة pipreqs التي تنشئ ملف requirements.txt بناءً على عمليات استيراد المشروع. إنه سهل الاستخدام.

لإنشاء ملف requirements.txt ، يمكنك تشغيل pipreqs / your_project / path

Pipdeptree

فكرت في دمجها مع pipdeptree أداة سطر أوامر أخرى رائعة و “سهلة الاستخدام” والتي ستساعد في عرض حزم python المثبتة في شكل شجرة تبعية.

بعد تنفيذ أمر pipdeptree في النافذة الطرفية في دليل virtualenv للمشروع ، سيتم عرض جميع حزم python المثبتة لشجرة التبعية:

مكافأة رائعة ستحذرك من pipdeptree عندما يكون لديك تبعيات متعددة حيث لا تتطابق الإصدارات تمامًا.

لقد وجدت أنه مفيد في بعض الحالات ، مثل:

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

الخيار 3: هل جربت تجميع النقاط؟

توفر الوحدة النمطية

pip-compile أمرين: pip-compile و pip-sync .

<الحزم وجميع (التبعيات الأساسية) المثبتة. ويمكنك تخزين ملفات .in و .txt في التحكم في الإصدار. ما مدى فائدة ذلك ، أليس كذلك؟

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

تساعد علامة

إنشاء تجزئات في إنشاء تجزئات. في هذه الحالة ، يقوم pip-compile بمراجعة فهرس PyPI لكل حزمة ذات مستوى عالٍ مطلوبة ، والبحث عن إصدارات الحزمة المتاحة.

لتحديث جميع الحزم ، أعد تشغيل pip-compile --upgrade بشكل دوري.

لتحديث حزمة معينة إلى أحدث إصدار أو إصدار معين ، استخدم علامة --upgrade-package أو -P .

يتم استخدام الأمر

pip-sync لتحديث بيئتك الافتراضية لتعكس بالضبط ما يوجد هناك. سيقوم الأمر بتثبيت / ترقية / إلغاء تثبيت كل ما هو ضروري لمطابقة محتويات requirements.txt .

غالبًا ما تكون تبعيات البرامج أكبر سطح هجوم

لمعرفة التبعيات التي يمتلكها مشروعك ، من المفيد جدًا اكتشاف الحزم التي تم تثبيتها وما هي التبعيات التي يمتلكها مشروعك.

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

سيؤدي استخدام تجميد النقطة حاليًا إلى إظهار قائمة الحزمة النهائية للاعتماديات.

أوصي باستخدام الوحدة النمطية pipdeptree التي تساعد في العثور على تعارضات التبعية المحتملة وعرض التبعية الفعلية في المشروع.

تم تثبيت

pipdeptree --reverse الحزمة أولاً

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

تغليف سعيد

قراءة ممتعة:

ويكي حول النقطة https://www.kennethreitz.org/essays/announcing-pipenv

تثبيت الحزم: http://nvie.com/posts/pin-your-packages/

عامل الإرساء: https://www.fullstackpython.com/docker.html