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


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

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

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

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

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

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

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

functions-framework
requests==2.20.0
numpy

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

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

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

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

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

# Code in main.py
from localpackage import script

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