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


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

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

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

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

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

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

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

functions-framework
requests==2.20.0
numpy

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

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

लोकल डिपेंडेंसी की पैकेजिंग

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

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

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

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

# Code in main.py
from localpackage import script

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