निर्भरता को संभालना


पायथन में लिखे गए क्लाउड फ़ंक्शंस के लिए निर्भरताएँ निर्दिष्ट करने के दो तरीके हैं: पिप पैकेज मैनेजर की requirements.txt फ़ाइल का उपयोग करना या अपने फ़ंक्शन के साथ स्थानीय निर्भरताएँ पैकेजिंग करना।

Pipfile/Pipfile.lock मानक का उपयोग करने वाली निर्भरता विशिष्टता समर्थित नहीं है। आपके प्रोजेक्ट में ये फ़ाइलें शामिल नहीं होनी चाहिए.

पिप के साथ निर्भरताएँ निर्दिष्ट करना

पायथन में निर्भरता को पाइप के साथ प्रबंधित किया जाता है और requirements.txt नामक मेटाडेटा फ़ाइल में व्यक्त किया जाता है। यह फ़ाइल उसी निर्देशिका में होनी चाहिए जिसमें main.py फ़ाइल है जिसमें आपका फ़ंक्शन कोड है।

जब आप अपने फ़ंक्शन को तैनात या पुन: तैनात करते हैं, तो क्लाउड फ़ंक्शंस आपकी निर्भरता के नवीनतम संस्करण को डाउनलोड और इंस्टॉल करने के लिए पाइप का उपयोग करता है जैसा कि requirements.txt फ़ाइल में घोषित किया गया है। requirements.txt फ़ाइल में प्रति पैकेज एक पंक्ति होती है। प्रत्येक पंक्ति में पैकेज का नाम और वैकल्पिक रूप से अनुरोधित संस्करण शामिल है। अधिक विवरण के लिए, requirements.txt संदर्भ देखें।

अपने निर्माण को निर्भरता संस्करण परिवर्तनों से प्रभावित होने से बचाने के लिए, अपने निर्भरता पैकेजों को एक विशिष्ट संस्करण पर पिन करने पर विचार करें।

निम्नलिखित एक उदाहरण requirements.txt फ़ाइल है:

functions-framework
requests==2.20.0
numpy

फ़ंक्शंस फ़्रेमवर्क सभी फ़ंक्शंस के लिए एक आवश्यक निर्भरता है। हालाँकि जब फ़ंक्शन बनाया जाता है तो क्लाउड फ़ंक्शंस इसे आपकी ओर से इंस्टॉल करता है, हम अनुशंसा करते हैं कि आप इसे स्पष्टता के लिए एक स्पष्ट निर्भरता के रूप में शामिल करें।

यदि आपका फ़ंक्शन निजी निर्भरता पर निर्भर करता है, तो हम अनुशंसा करते हैं कि आप functions-framework अपनी निजी रजिस्ट्री में प्रतिबिंबित करें। सार्वजनिक इंटरनेट से पैकेज इंस्टॉल करने से बचने के लिए अपने फ़ंक्शन की निर्भरता के रूप में मिरर किए गए functions-framework शामिल करें।

पैकेजिंग स्थानीय निर्भरताएँ

आप अपने फ़ंक्शन के साथ निर्भरताओं को पैकेज और तैनात भी कर सकते हैं। यह दृष्टिकोण उपयोगी है यदि आपकी निर्भरता पिप पैकेज मैनेजर के माध्यम से उपलब्ध नहीं है या यदि आपके क्लाउड फ़ंक्शंस वातावरण की इंटरनेट पहुंच प्रतिबंधित है।

उदाहरण के लिए, आप निम्न जैसी निर्देशिका संरचना का उपयोग कर सकते हैं:

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

फिर आप निम्न import विवरण का उपयोग करके localpackage से हमेशा की तरह कोड आयात कर सकते हैं।

# Code in main.py
from localpackage import script

ध्यान दें कि यह दृष्टिकोण किसी भी setup.py फ़ाइल को नहीं चलाएगा। उन फ़ाइलों वाले पैकेज अभी भी बंडल किए जा सकते हैं, लेकिन क्लाउड फ़ंक्शंस पर सही ढंग से नहीं चल सकते हैं।