التعامل مع التبعيات


هناك طريقتان لتحديد التبعيات لواجهة برمجة التطبيقات Cloud Functions المكتوبة بلغة Python: استخدام ملف requirements.txt الخاص بمدير الحِزم pip أو حزم التبعيات المحلية إلى جانب وظيفتك.

ملف مواصفات التبعيات باستخدام معيار Pipfile/Pipfile.lock غير متوافق. يجب ألا يتضمّن مشروعك هذه الملفات.

تحديد التبعيات باستخدام pip

تتم إدارة التبعيات في بايثون باستخدام pip ويتم التعبير عنها في ملف بيانات وصفية يسمى requirements.txt. يجب أن يكون هذا الملف في الدليل نفسه الذي يتضمّن الملف main.py الذي يحتوي على رمز الدالة.

عند نشر الدالة أو إعادة نشرها، يستخدم Cloud Functions ملف pip لتنزيل أحدث إصدار من العناصر التابعة لك وتثبيته كما هو موضّح في ملف requirements.txt. يتضمّن ملف requirements.txt سطرًا واحدًا لكل حزمة. يحتوي كل سطر على اسم الحزمة، والإصدار المطلوب اختياريًا. لمزيد من التفاصيل، يُرجى الاطّلاع على requirements.txt المرجع.

لمنع تأثر حِزمة التصميم بتغييرات إصدارات التبعيات، ننصح بتثبيت حِزم التبعيات على إصدار معيّن.

في ما يلي مثال على ملف requirements.txt:

functions-framework
requests==2.20.0
numpy

إطار عمل الدوالّ هو تبعية مطلوبة لجميع الدوالّ. على الرغم من أنّ Cloud Functions تثبِّته نيابةً عنك عند إنشاء الدالة، ننصحك بتضمينه كتبعية صريحة للوضوح.

إذا كانت وظيفتك تعتمد على تبعيات خاصة، ننصحك بمحاولة مطابقة functions-framework مع السجلّ الخاص. يمكنك تضمين العلامة functions-framework المنسوخة كملحق لوظيفتك لتجنُّب تثبيت الحزمة من شبكة الإنترنت العامة.

حزم المهام التابعة المحلية

يمكنك أيضًا تجميع التبعيات ونشرها إلى جانب الدالة. هذا الأسلوب مفيد في حال لم تكن التبعية متاحة عبر مدير حزم pip أو إذا كان الوصول إلى الإنترنت في بيئة Cloud Functions محظورًا.

على سبيل المثال، يمكنك استخدام بنية دليل مثل ما يلي:

myfunction/
├── main.py
└── localpackage/
    ├── __init__.py
    └── script.py

يمكنك بعد ذلك استيراد الرمز كالمعتاد من localpackage باستخدام statement import التالي.

# Code in main.py
from localpackage import script

يُرجى العِلم أنّ هذا النهج لن يؤدي إلى تشغيل أي ملفات setup.py. وسيظل من الممكن تجميع الحِزم التي تحتوي على هذه الملفات، ولكن قد لا يتم تشغيلها بشكل صحيح على Cloud Functions.