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


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

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

पीआईपी (पिक्चर में पिक्चर) के साथ डिपेंडेंसी तय करना

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

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

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

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

functions-framework
requests==2.20.0
numpy

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

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

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

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

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

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

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

# Code in main.py
from localpackage import script

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