डिपेंडेंसी हैंडल करना


Python में लिखे गए Cloud Functions के लिए डिपेंडेंसी तय करने के दो तरीके हैं: pip पैकेज मैनेजर की requirements.txt फ़ाइल का इस्तेमाल करना या अपने फ़ंक्शन के साथ स्थानीय डिपेंडेंसी को पैकेज करना.

Pipfile/Pipfile.lock स्टैंडर्ड का इस्तेमाल करके, डिपेंडेंसी की जानकारी देने की सुविधा काम नहीं करती. आपके प्रोजेक्ट में ये फ़ाइलें शामिल नहीं होनी चाहिए.

pip की मदद से डिपेंडेंसी तय करना

Python में डिपेंडेंसी को pip की मदद से मैनेज किया जाता है. साथ ही, इन्हें requirements.txt नाम की मेटाडेटा फ़ाइल में दिखाया जाता है. यह फ़ाइल उसी डायरेक्ट्री में होनी चाहिए जिसमें main.py फ़ाइल है. इसमें आपका फ़ंक्शन कोड होता है.

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

डिपेंडेंसी के वर्शन में होने वाले बदलावों से अपने बिल्ड पर असर न पड़े, इसके लिए डिपेंडेंसी पैकेज को किसी खास वर्शन पर पिन करें.

यहां requirements.txt फ़ाइल का उदाहरण दिया गया है:

functions-framework
requests==2.20.0
numpy

सभी फ़ंक्शन के लिए, Functions फ़्रेमवर्क का इस्तेमाल करना ज़रूरी है. फ़ंक्शन बनाने पर, Cloud Functions इसे आपकी ओर से इंस्टॉल कर देता है. हालांकि, हमारा सुझाव है कि आप इसे साफ़ तौर पर डिपेंडेंसी के तौर पर शामिल करें.

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

स्थानीय डिपेंडेंसी को पैकेज करना

अपने फ़ंक्शन के साथ-साथ, डिपेंडेंसी को भी पैकेज और डिप्लॉय किया जा सकता है. यह तरीका तब काम आता है, जब आपकी डिपेंडेंसी, pip पैकेज मैनेजर के ज़रिए उपलब्ध न हो या आपके Cloud Functions एनवायरमेंट के इंटरनेट ऐक्सेस पर पाबंदी लगी हो.

उदाहरण के लिए, डायरेक्ट्री स्ट्रक्चर के तौर पर, इस तरह का स्ट्रक्चर इस्तेमाल किया जा सकता है:

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

इसके बाद, नीचे दिए गए import स्टेटमेंट का इस्तेमाल करके, localpackage से कोड को हमेशा की तरह इंपोर्ट किया जा सकता है.

# Code in main.py
from localpackage import script

ध्यान दें कि इस तरीके से कोई भी setup.py फ़ाइल नहीं चलेगी. उन फ़ाइलों वाले पैकेज अब भी बंडल किए जा सकते हैं. हालांकि, हो सकता है कि वे Cloud Functions पर सही तरीके से न चलें.