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


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

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

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

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

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

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

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

functions-framework
requests==2.20.0
numpy

सभी फ़ंक्शन के लिए, Functions फ़्रेमवर्क का इस्तेमाल करना ज़रूरी है. फ़ंक्शन बनाने पर, 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 पर सही तरीके से न चलें.