Invoke – إدارة المهام بأتمتة Python

مدرب بايثون أونلاين للمبتدئين

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

ابدأ الدورة

مقدمة

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

Invoke هي مكتبة Python قوية لإنشاء أدوات سطر الأوامر مع إمكانية وصف المهام كدوال Python عادية. توفر طريقة بسيطة ولكنها وظيفية لتنظيم الأوامر الآلية، تشبه الأدوات الشائعة مثل make أو Fabric، ولكنها مكتوبة بلغة Python الخالصة.

ما هي Invoke

Invoke هي مكتبة Python لوصف وتنفيذ المهام بأسلوب سطر الأوامر، صُممت لتبسيط أتمتة عمليات التطوير. تم فصلها من Fabric 2 كمكون مستقل لبناء واجهات سطر الأوامر وأتمتة المهام.

المزايا الرئيسية لـ Invoke

توفر المكتبة للمطورين الإمكانيات التالية:

  • وصف تعريفي للمهام – تُوصف المهام كدوال Python عادية مع المُزخرف @task
  • إنشاء تلقائي لواجهة CLI – يتم إنشاء واجهة سطر الأوامر تلقائيًا بناءً على الكود
  • دعم غني للوسائط – دعم مدمج للوسائط والخيارات والمعلومات المساعدة
  • التكامل مع shell – عمل مريح مع أوامر shell عبر كائن Context
  • إعدادات مرنة – دعم للمساحات (namespaces) وملفات الإعدادات ومتغيرات البيئة
  • قابلية التوسع – إمكانية إنشاء خطوط أنابيب معقدة وسلاسل مهام

التثبيت والإعداد الأولي

تثبيت المكتبة

لتثبيت Invoke استخدم pip:

pip install invoke

بعد التثبيت، يصبح الأمر inv متاحًا، وهو مشابه للأمر make ولكنه يعمل مع كود Python.

التحقق من التثبيت

يمكنك التأكد من التثبيت الصحيح باستخدام الأمر:

inv --version

هيكل المهام والبناء الأساسي

إنشاء المهمة الأولى

أبسط مثال لمهمة يبدو كالتالي:

from invoke import task

@task
def hello(c):
    print("مرحبًا بالعالم!")

تشغيل المهمة يتم بالأمر:

inv hello

كائن Context

كل مهمة تستقبل كائن Context (يُرمز له عادة بـ c)، والذي يمكن من خلاله تنفيذ أوامر shell، إدارة الإعدادات والوصول إلى أدوات متنوعة:

@task
def build(c):
    c.run("python setup.py sdist")
    c.run("python setup.py bdist_wheel")

المُزخرف @task

يُستخدم المُزخرف @task لتعريف الدالة كمهمة CLI. يدعم العديد من المعاملات لتخصيص السلوك:

@task(help={"name": "اسم المستخدم للترحيب"})
def greet(c, name="مجهول"):
    print(f"مرحبًا، {name}!")

التشغيل مع المعاملات:

inv greet --name=أحمد

العمل مع الوسائط والخيارات

الوسائط الإجبارية

لإنشاء وسائط إجبارية، استخدم معاملات الدالة بدون قيم افتراضية:

@task
def say(c, word):
    print(f"تم القول: {word}")
inv say --word="مرحبًا بالعالم!"

الوسائط الاختيارية

يتم إنشاء الوسائط الاختيارية باستخدام قيم افتراضية:

@task
def greet(c, name="ضيف"):
    print(f"أهلاً بك يا {name}!")
inv greet
inv greet --name=سارة

تنظيم المهام في Namespaces

لتنظيم المهام في مجموعات منطقية، استخدم المساحات (Namespaces):

from invoke import Collection, task

@task
def clean(c):
    c.run("rm -rf dist")

@task
def build(c):
    c.run("python setup.py sdist")

# إنشاء مجموعة مهام
namespace = Collection('build')
namespace.add_task(clean)
namespace.add_task(build)

التشغيل:

inv build.clean
inv build.build

أفضل الممارسات والنصائح

  • استخدم أسماء واضحة للمهام – اجعل أسماء المهام تعبر عن وظيفتها
  • وثق المهام – أضف نصوص مساعدة باستخدام معامل help
  • قسّم المهام الكبيرة – قسم المهام المعقدة إلى مهام أصغر قابلة لإعادة الاستخدام
  • استخدم ملفات الإعدادات – لتجنب تكرار القيم في كل مهمة
  • اختبر المهام – تأكد من عمل المهام بشكل صحيح قبل الاعتماد عليها

توصيات