सामान्य "Google अनुवाद" Python 2 App Engine पर ऐप्लिकेशन

1. खास जानकारी

कोडलैब की इस सीरीज़ में, डेवलपर को अपने ऐप्लिकेशन को डिप्लॉय करने के अलग-अलग विकल्पों के बारे में जानकारी दी गई है. यह सीरीज़, डेवलपर के हिसाब से अपनी गति से सीखने और सीखने के लिए उपलब्ध ट्यूटोरियल के तौर पर उपलब्ध है. इस कोडलैब में, आपको Python के साथ Google Cloud Translation API का इस्तेमाल करने का तरीका पता चलेगा. साथ ही, इसे स्थानीय तौर पर चलाने या Cloud के सर्वरलेस कंप्यूट प्लैटफ़ॉर्म (App Engine, Cloud Functions या Cloud Run) पर डिप्लॉय करने का तरीका भी पता चलेगा. इस ट्यूटोरियल के रिपॉज़िटरी में मौजूद सैंपल ऐप्लिकेशन को, कॉन्फ़िगरेशन में सिर्फ़ छोटे बदलाव करके, कम से कम आठ अलग-अलग तरीकों से डिप्लॉय किया जा सकता है:

  1. लोकल Flask सर्वर (Python 2)
  2. लोकल Flask सर्वर (Python 3)
  3. App Engine (Python 2)
  4. App Engine (Python 3)
  5. Cloud Functions (Python 3)
  6. Cloud Run (Docker के ज़रिए Python 2)
  7. Cloud Run (Docker की मदद से Python 3)
  8. Cloud Run (Cloud Buildpacks के ज़रिए Python 3)

इस कोडलैब में, ऊपर दिए गए बोल्ड किए गए प्लैटफ़ॉर्म पर इस ऐप्लिकेशन को डिप्लॉय करने के बारे में बताया गया है.

आपको इनके बारे में जानकारी मिलेगी

आपको इन चीज़ों की ज़रूरत होगी

  • Google Cloud प्रोजेक्ट, जिसमें चालू Cloud Billing खाता हो
  • स्थानीय तौर पर चलाने के लिए इंस्टॉल किया गया Flask या क्लाउड पर डिप्लॉयमेंट के लिए चालू किया गया क्लाउड सर्वरलेस कंप्यूट प्लैटफ़ॉर्म
  • Python की बुनियादी स्किल
  • ऑपरेटिंग सिस्टम के बुनियादी कमांड के बारे में जानकारी

सर्वे

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

इसे पढ़ें और उसमें दिए गए अभ्यास पूरे करें सिर्फ़ इसे पढ़ें

Python के साथ अपने अनुभव को लेकर, 1 से 5 के स्केल पर आप किस हद तक संतुष्ट हैं?

शुरुआती मध्यम बेहतर

Google Cloud की सेवाओं को इस्तेमाल करने के अपने अनुभव को क्या रेटिंग देंगे?

नौसिखिया मध्यम प्रवीण

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेट अप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे किसी भी समय अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट में यूनीक होना चाहिए. साथ ही, इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, अपने-आप एक यूनीक स्ट्रिंग जनरेट करता है. आम तौर पर, आपको यह जानने की ज़रूरत नहीं होती कि वह स्ट्रिंग क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे PROJECT_ID के तौर पर पहचाना जाता है. इसलिए, अगर आपको यह पसंद नहीं है, तो कोई और स्ट्रिंग जनरेट करें या अपनी कोई स्ट्रिंग आज़माकर देखें कि वह उपलब्ध है या नहीं. इसके बाद, प्रोजेक्ट बनाने के बाद इसे "फ़्रीज़" कर दिया जाता है.
  • तीसरी वैल्यू, प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, आपको Cloud के संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब को चलाने में ज़्यादा खर्च नहीं आता. इस ट्यूटोरियल के बाद, आपसे कोई शुल्क न लिया जाए, इसके लिए संसाधनों को बंद करें. इसके लिए, कोडलैब के आखिर में दिए गए "क्लीन-अप" निर्देशों का पालन करें. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले कार्यक्रम में शामिल हो सकते हैं.

3. Translation API चालू करना

हमारे सैंपल ऐप्लिकेशन के लिए, आपको यहां दिए गए निर्देशों का इस्तेमाल करके Cloud Translation API और App Engine सेवा को चालू करना होगा.

Cloud API चालू करना

शुरुआती जानकारी

आपके ऐप्लिकेशन में किसी भी Google API का इस्तेमाल करने के लिए, उसे चालू होना चाहिए. नीचे दिए गए उदाहरण में, Cloud Vision API को चालू करने के दो तरीके बताए गए हैं. किसी एक Cloud API को चालू करने का तरीका जानने के बाद, अन्य एपीआई भी चालू किए जा सकते हैं, क्योंकि दोनों की प्रोसेस एक जैसी होती है.

पहला विकल्प: Cloud Shell या अपने कमांड-लाइन इंटरफ़ेस से

Cloud Console से एपीआई चालू करना आम बात है. हालांकि, कुछ डेवलपर कमांड लाइन से सभी काम करना पसंद करते हैं. ऐसा करने के लिए, आपको किसी एपीआई का "सेवा का नाम" देखना होगा. यह यूआरएल जैसा दिखता है: SERVICE_NAME.googleapis.com. ये आपको इस्तेमाल किए जा सकने वाले प्रॉडक्ट के चार्ट में मिल सकते हैं. इसके अलावा, Google Discovery API की मदद से, प्रोग्राम के हिसाब से इनके लिए क्वेरी की जा सकती है.

इस जानकारी के साथ, Cloud Shell या gcloud कमांड-लाइन टूल इंस्टॉल किए गए अपने लोकल डेवलपमेंट एनवायरमेंट का इस्तेमाल करके, एपीआई को इस तरह चालू किया जा सकता है:

gcloud services enable SERVICE_NAME.googleapis.com

उदाहरण के लिए, यह कमांड Cloud Vision API को चालू करता है:

gcloud services enable vision.googleapis.com

यह निर्देश, App Engine को चालू करता है:

gcloud services enable appengine.googleapis.com

एक अनुरोध से कई एपीआई भी चालू किए जा सकते हैं. उदाहरण के लिए, यह कमांड लाइन Cloud Run, Cloud Artifact Registry, और Cloud Translation API को चालू करती है:

gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com

दूसरा विकल्प: Cloud Console से

Vision API को एपीआई मैनेजर में भी चालू किया जा सकता है. Cloud Console में, एपीआई मैनेजर पर जाएं और लाइब्रेरी चुनें.

fb0f1d315f122d4a.png

अगर आपको Cloud Vision API को चालू करना है, तो खोज बार में "vision" टाइप करें. इसके बाद, आपको खोज के नतीजों में वह सब दिखेगा जो आपके टाइप किए गए शब्द से मेल खाता है:

2275786a24f8f204.png

वह एपीआई चुनें जिसे आपको चालू करना है और चालू करें पर क्लिक करें:

2556f923b628e31.png

लागत

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

उपयोगकर्ताओं को किसी भी एपीआई को चालू करने से पहले, उसकी कीमत की जानकारी देखनी चाहिए. खास तौर पर, यह देखना चाहिए कि उसमें कोई मुफ़्त टीयर है या नहीं. अगर है, तो वह क्या है. अगर आपको Cloud Vision API चालू करना है, तो आपको उसकी कीमत की जानकारी वाला पेज देखना होगा. Cloud Vision में बिना किसी शुल्क के इस्तेमाल करने के लिए कोटा तय है. जब तक आपके इस्तेमाल की कुल संख्या, हर महीने तय की गई सीमा के अंदर रहती है, तब तक आपसे कोई शुल्क नहीं लिया जाएगा.

Google के अलग-अलग एपीआई के लिए, कीमतें और बिना शुल्क वाले टीयर अलग-अलग होते हैं. उदाहरण:

Google के अलग-अलग प्रॉडक्ट के लिए अलग-अलग तरीके से बिलिंग की जाती है. इसलिए, इस जानकारी के लिए अपने एपीआई के दस्तावेज़ का रेफ़रंस ज़रूर लें.

खास जानकारी

अब आपको Google के एपीआई को सामान्य तौर पर चालू करने का तरीका पता है. अगर आपने अब तक ऐसा नहीं किया है, तो कृपया एपीआई मैनेजर पर जाएं और Cloud Translation API और App Engine, दोनों सेवाओं को चालू करें. Cloud Translation API को इसलिए चालू करना ज़रूरी है, क्योंकि हमारा ऐप्लिकेशन इसका इस्तेमाल करेगा. वहीं, App Engine को इसलिए चालू करना ज़रूरी है, क्योंकि आपने App Engine ऐप्लिकेशन डिप्लॉय किया है. अगर आपको कमांड-लाइन से ऐसा करना है, तो यह कमांड दें:

gcloud services enable appengine.googleapis.com translate.googleapis.com

"हमेशा मुफ़्त" टीयर की खास जानकारी वाले पेज पर, हर महीने के कोटे की जानकारी नहीं दी गई है. हालांकि, Translation API के शुल्क वाले पेज पर बताया गया है कि सभी उपयोगकर्ताओं को हर महीने अनुवाद किए गए वर्णों की तय संख्या मिलती है. अगर आपका ट्रैफ़िक इस थ्रेशोल्ड से कम है, तो आपको एपीआई से कोई शुल्क नहीं देना होगा. अगर Google Cloud से जुड़ा कोई अन्य शुल्क है, तो इसकी जानकारी "साफ़ करें" सेक्शन में दी जाएगी.

4. ऐप्लिकेशन का सैंपल कोड पाना

रिपो में कोड को स्थानीय तौर पर या Cloud Shell में git clone कमांड का इस्तेमाल करके क्लोन करें. इसके अलावा, नीचे दिए गए स्क्रीनशॉट में दिखाए गए ग्रीन कोड बटन से ZIP फ़ाइल डाउनलोड करें:

5cd6110c4414cf65.png

अब आपके पास सभी चीज़ें हैं. इस ट्यूटोरियल को पूरा करने के लिए, फ़ोल्डर की पूरी कॉपी बनाएं. ऐसा इसलिए, क्योंकि इसमें फ़ाइलों को मिटाना या उनमें बदलाव करना पड़ सकता है. अगर आपको किसी दूसरे डिप्लॉयमेंट की ज़रूरत है, तो ओरिजनल को कॉपी करके फिर से शुरू किया जा सकता है. इससे आपको उसे फिर से क्लोन या डाउनलोड नहीं करना पड़ेगा.

5. सैंपल ऐप्लिकेशन का टूर

सैंपल ऐप्लिकेशन, Google Translate का एक आसान वर्शन है. इसमें उपयोगकर्ताओं को अंग्रेज़ी में टेक्स्ट डालने के लिए कहा जाता है और उस टेक्स्ट का स्पैनिश में अनुवाद दिखाया जाता है. अब main.py फ़ाइल खोलें, ताकि हम देख सकें कि यह कैसे काम करती है. लाइसेंस से जुड़ी टिप्पणी वाली लाइनों को हटाकर, यह सबसे ऊपर और सबसे नीचे इस तरह दिखता है:

from flask import Flask, render_template, request
import google.auth
from google.cloud import translate

app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')

# . . . [translate() function definition] . . .

if __name__ == '__main__':
    import os
    app.run(debug=True, threaded=True, host='0.0.0.0',
            port=int(os.environ.get('PORT', 8080)))
  1. इंपोर्ट करने पर, Flask फ़ंक्शन, google.auth मॉड्यूल, और Cloud Translation API क्लाइंट लाइब्रेरी मिलती है.
  2. ग्लोबल वैरिएबल, Flask ऐप्लिकेशन, Cloud प्रोजेक्ट आईडी, Translation API क्लाइंट, Translation API कॉल के लिए पैरंट "लोकेशन पाथ", और सोर्स और टारगेट भाषाओं को दिखाते हैं. इस मामले में, ये वैल्यू अंग्रेज़ी (en) और स्पैनिश (es) हैं. हालांकि, इन वैल्यू को Cloud Translation API के साथ काम करने वाली अन्य भाषाओं के कोड में बदला जा सकता है.
  3. सबसे नीचे मौजूद बड़े if ब्लॉक का इस्तेमाल, इस ऐप्लिकेशन को स्थानीय तौर पर चलाने के ट्यूटोरियल में किया जाता है. यह हमारे ऐप्लिकेशन को दिखाने के लिए, Flask डेवलपमेंट सर्वर का इस्तेमाल करता है. यह सेक्शन, Cloud Run डिप्लॉयमेंट ट्यूटोरियल के लिए भी यहां मौजूद है. ऐसा तब होता है, जब वेब सर्वर को कंटेनर में बंडल नहीं किया जाता. आपसे कंटेनर में सर्वर को बंडल करने के लिए कहा जाता है. हालांकि, अगर आपने इस बात को अनदेखा किया, तो ऐप्लिकेशन कोड, Flask डेवलपमेंट सर्वर का इस्तेमाल करेगा. (यह App Engine या Cloud Functions से जुड़ी कोई समस्या नहीं है, क्योंकि ये सोर्स पर आधारित प्लैटफ़ॉर्म हैं. इसका मतलब है कि Google Cloud, डिफ़ॉल्ट वेब सर्वर उपलब्ध कराता है और उसे चलाता है.)

आखिर में, main.py के बीच में ऐप्लिकेशन का मुख्य हिस्सा, translate() फ़ंक्शन है:

@app.route('/', methods=['GET', 'POST'])
def translate(gcf_request=None):
    """
    main handler - show form and possibly previous translation
    """

    # Flask Request object passed in for Cloud Functions
    # (use gcf_request for GCF but flask.request otherwise)
    local_request = gcf_request if gcf_request else request

    # reset all variables (GET)
    text = translated = None

    # if there is data to process (POST)
    if local_request.method == 'POST':
        text = local_request.form['text']
        data = {
            'contents': [text],
            'parent': PARENT,
            'target_language_code': TARGET[0],
        }
        # handle older call for backwards-compatibility
        try:
            rsp = TRANSLATE.translate_text(request=data)
        except TypeError:
            rsp = TRANSLATE.translate_text(**data)
        translated = rsp.translations[0].translated_text

    # create context & render template
    context = {
        'orig':  {'text': text, 'lc': SOURCE},
        'trans': {'text': translated, 'lc': TARGET},
    }
    return render_template('index.html', **context)

प्राइमरी फ़ंक्शन, उपयोगकर्ता का इनपुट लेता है और ज़्यादा काम करने के लिए, Translation API को कॉल करता है. चलिए, इस बारे में ज़्यादा जानते हैं:

  1. देखें कि local_request वैरिएबल का इस्तेमाल करके, Cloud Functions से अनुरोध आ रहे हैं या नहीं. Cloud Functions, अपना Flask अनुरोध ऑब्जेक्ट भेजता है. वहीं, अन्य सभी (स्थानीय तौर पर चलने वाले या App Engine या Cloud Run पर डिप्लॉय किए गए) को सीधे Flask से अनुरोध ऑब्जेक्ट मिलेगा.
  2. फ़ॉर्म के लिए बुनियादी वैरिएबल रीसेट करें. यह मुख्य रूप से GET अनुरोधों के लिए है, क्योंकि POST अनुरोधों में ऐसा डेटा होगा जो इनकी जगह ले लेगा.
  3. अगर यह POST है, तो अनुवाद करने के लिए टेक्स्ट लें और एपीआई मेटाडेटा की ज़रूरी शर्तों को दिखाने वाला JSON स्ट्रक्चर बनाएं. इसके बाद, एपीआई को कॉल करें. अगर उपयोगकर्ता किसी पुरानी लाइब्रेरी का इस्तेमाल कर रहा है, तो एपीआई के पिछले वर्शन का इस्तेमाल करें.
  4. भले ही, असल नतीजों (POST) या बिना डेटा (GET) को टेंप्लेट कॉन्टेक्स्ट में फ़ॉर्मैट करें और रेंडर करें.

ऐप्लिकेशन का विज़ुअल हिस्सा, टेंप्लेट index.html फ़ाइल में होता है. इसमें पहले अनुवाद किए गए नतीजे दिखते हैं. अगर कोई नतीजा नहीं है, तो यह खाली दिखता है. इसके बाद, अनुवाद के लिए कुछ लिखने के लिए कहा जाता है:

<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<h2>My Google Translate (1990s edition)</h2>

{% if trans['text'] %}
    <h4>Previous translation</h4>
    <li><b>Original</b>:   {{ orig['text'] }}  (<i>{{ orig['lc'][0] }}</i>)</li>
    <li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}

<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>

6. लाइब्रेरी में स्थानीय पैकेज/डिपेंडेंसी इंस्टॉल करना

जैसा कि पहले बताया गया है, सैंपल ऐप्लिकेशन में Flask माइक्रो वेब फ़्रेमवर्क और Python के लिए Google Cloud Translation API क्लाइंट लाइब्रेरी का इस्तेमाल किया जाता है. pip और इन पैकेज के जोड़े को इंस्टॉल और अपडेट करने के लिए, यह pip (या pip3) कमांड इस्तेमाल करें:

pip install -t lib -r requirements.txt

ऊपर दी गई टिप्पणी को चलाने के बाद, आपको इंस्टॉलेशन का आउटपुट दिखेगा, जो कुछ इस तरह दिख सकता है:

$ pip install -t lib -r requirements.txt
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Collecting flask>=1.1.2
  Using cached Flask-1.1.4-py2.py3-none-any.whl (94 kB)
Collecting google-cloud-translate>=2.0.1
  Using cached google_cloud_translate-2.0.2-py2.py3-none-any.whl (91 kB)
Collecting click<8.0,>=5.1
  Using cached click-7.1.2-py2.py3-none-any.whl (82 kB)
Collecting Jinja2<3.0,>=2.10.1
  Using cached Jinja2-2.11.3-py2.py3-none-any.whl (125 kB)
Collecting Werkzeug<2.0,>=0.15
  Using cached Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
Collecting itsdangerous<2.0,>=0.24
  Using cached itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting google-api-core[grpc]<2.0.0dev,>=1.15.0
  Downloading google_api_core-1.29.0-py2.py3-none-any.whl (93 kB)
     |████████████████████████████████| 93 kB 2.1 MB/s
Collecting google-cloud-core<2.0dev,>=1.1.0
  Using cached google_cloud_core-1.6.0-py2.py3-none-any.whl (28 kB)
Collecting MarkupSafe>=0.23
  Using cached MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl (17 kB)
Collecting protobuf>=3.12.0
  Downloading protobuf-3.17.2-cp27-cp27m-macosx_10_9_x86_64.whl (958 kB)
     |████████████████████████████████| 958 kB 21.6 MB/s
Collecting futures>=3.2.0; python_version < "3.2"
  Using cached futures-3.3.0-py2-none-any.whl (16 kB)
Collecting six>=1.13.0
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting packaging>=14.3
  Using cached packaging-20.9-py2.py3-none-any.whl (40 kB)
Collecting googleapis-common-protos<2.0dev,>=1.6.0
  Using cached googleapis_common_protos-1.52.0-py2.py3-none-any.whl (100 kB)
Collecting requests<3.0.0dev,>=2.18.0
  Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB)
Collecting google-auth<2.0dev,>=1.25.0
  Using cached google_auth-1.30.1-py2.py3-none-any.whl (146 kB)
Collecting pytz
  Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB)
Collecting setuptools>=40.3.0
  Using cached setuptools-44.1.1-py2.py3-none-any.whl (583 kB)
Collecting grpcio<2.0dev,>=1.29.0; extra == "grpc"
  Using cached grpcio-1.38.0-cp27-cp27m-macosx_10_10_x86_64.whl (3.8 MB)
Collecting pyparsing>=2.0.2
  Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
Collecting chardet<5,>=3.0.2
  Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB)
Collecting urllib3<1.27,>=1.21.1
  Using cached urllib3-1.26.5-py2.py3-none-any.whl (138 kB)
Collecting idna<3,>=2.5
  Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Collecting certifi>=2017.4.17
  Downloading certifi-2021.5.30-py2.py3-none-any.whl (145 kB)
     |████████████████████████████████| 145 kB 61.1 MB/s
Collecting pyasn1-modules>=0.2.1
  Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)
Collecting rsa<4.6; python_version < "3.6"
  Using cached rsa-4.5-py2.py3-none-any.whl (36 kB)
Collecting cachetools<5.0,>=2.0.0
  Using cached cachetools-3.1.1-py2.py3-none-any.whl (11 kB)
Collecting enum34>=1.0.4; python_version < "3.4"
  Using cached enum34-1.1.10-py2-none-any.whl (11 kB)
Collecting pyasn1<0.5.0,>=0.4.6
  Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask, six, protobuf, futures, pyparsing, packaging, googleapis-common-protos, chardet, urllib3, idna, certifi, requests, pyasn1, pyasn1-modules, rsa, cachetools, setuptools, google-auth, pytz, enum34, grpcio, google-api-core, google-cloud-core, google-cloud-translate
ERROR: pip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts.
matplotlib 1.3.1 requires nose, which is not installed.
matplotlib 1.3.1 requires tornado, which is not installed.
Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 cachetools-3.1.1 certifi-2021.5.30 chardet-4.0.0 click-7.1.2 enum34-1.1.10 flask-1.1.4 futures-3.3.0 google-api-core-1.29.0 google-auth-1.30.1 google-cloud-core-1.6.0 google-cloud-translate-2.0.2 googleapis-common-protos-1.52.0 grpcio-1.38.0 idna-2.10 itsdangerous-1.1.0 packaging-20.9 protobuf-3.17.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-2.4.7 pytz-2021.1 requests-2.25.1 rsa-4.5 setuptools-44.1.1 six-1.16.0 urllib3-1.26.5

7. सेवा को डिप्लॉय करना

अनुवाद सेवा को Python 2 App Engine पर डिप्लॉय करने के लिए, यह कमांड चलाएं:

gcloud app deploy

आउटपुट इस तरह दिखेगा. साथ ही, अगले चरणों के लिए कुछ प्रॉम्प्ट भी दिखेंगे:

$ gcloud app deploy
Services to deploy:

descriptor:      [/private/tmp/nebulous-serverless-python/app.yaml]
source:          [/private/tmp/nebulous-serverless-python]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [20210422t161025]
target url:      [https://PROJECT_ID.appspot.com]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 1290 files to Google Cloud Storage                       ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse

अब आपका ऐप्लिकेशन दुनिया भर में उपलब्ध है. इसे डिप्लॉयमेंट आउटपुट में दिए गए यूआरएल (इसमें आपका प्रोजेक्ट आईडी शामिल होता है) पर जाकर ऐक्सेस किया जा सकता है:

da28f951c33a2c3d.png

इसे काम करते हुए देखने के लिए, कुछ अनुवाद करें!

d911984d15dd5ef9.png

8. नतीजा

बधाई हो! आपने Cloud Translation API को चालू करने, ज़रूरी क्रेडेंशियल पाने, और Python 2 App Engine में एक आसान वेब ऐप्लिकेशन डिप्लॉय करने का तरीका जाना है! इस डिप्लॉयमेंट के बारे में ज़्यादा जानने के लिए, रिपो में मौजूद इस टेबल पर जाएं.

व्यवस्थित करें

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

हालांकि, अगर आप अगले ट्यूटोरियल पर जाने के लिए तैयार नहीं हैं या आपको लगता है कि इंटरनेट पर आपके हाल ही में डिप्लॉय किए गए ऐप्लिकेशन का पता चल सकता है, तो शुल्क से बचने के लिए, अपना App Engine ऐप्लिकेशन बंद करें, अपना Cloud फ़ंक्शन मिटाएं या अपनी Cloud Run सेवा बंद करें. जब आप अगले कोडलैब पर जाने के लिए तैयार हों, तो इसे फिर से चालू किया जा सकता है. दूसरी ओर, अगर आपको इस ऐप्लिकेशन या अन्य कोडलैब का इस्तेमाल नहीं करना है और आपको सब कुछ पूरी तरह से मिटाना है, तो अपना प्रोजेक्ट बंद करें.

साथ ही, Google Cloud के सर्वरलेस कंप्यूट प्लैटफ़ॉर्म पर डिप्लॉय करने पर, बिल्ड और स्टोरेज के लिए थोड़ी सी कीमत चुकानी पड़ती है. Cloud Build और Cloud Storage, दोनों के लिए मुफ़्त में इस्तेमाल किए जा सकने वाले स्टोरेज का कोटा अलग-अलग होता है. ज़्यादा पारदर्शिता के लिए, Cloud Build आपके ऐप्लिकेशन की इमेज बनाता है. इसके बाद, उसे Cloud Container Registry या इसके बाद के वर्शन Artifact Registry में से किसी एक में सेव किया जाता है. उस इमेज को सेव करने पर, उस कोटे का कुछ हिस्सा खर्च हो जाता है. साथ ही, उस इमेज को सेवा में ट्रांसफ़र करने पर, नेटवर्क से बाहर भेजे जाने वाले डेटा की वजह से भी कोटा खर्च होता है. हालांकि, हो सकता है कि आप किसी ऐसे इलाके में हों जहां यह मुफ़्त टीयर उपलब्ध न हो. इसलिए, संभावित खर्च को कम करने के लिए, अपने स्टोरेज के इस्तेमाल पर नज़र रखें.

9. अन्य संसाधन

यहां दिए गए सेक्शन में, आपको पढ़ने के लिए और भी कॉन्टेंट मिल सकता है. साथ ही, इस ट्यूटोरियल से मिली जानकारी को बेहतर बनाने के लिए, सुझाई गई गतिविधियां भी मिल सकती हैं.

अतिरिक्त स्टडी

अब आपके पास Translation API का कुछ अनुभव है. अपनी स्किल को और बेहतर बनाने के लिए, कुछ और एक्सरसाइज़ करते हैं. लर्निंग पाथ जारी रखने के लिए, हमारे सैंपल ऐप्लिकेशन में बदलाव करके ये काम करें:

  1. स्थानीय तौर पर चलाने या Google Cloud के सर्वरलेस कंप्यूट प्लैटफ़ॉर्म पर डिप्लॉय करने के लिए, इस कोडलैब के सभी अन्य वर्शन पूरे करें. रिपो README देखें.
  2. किसी दूसरी प्रोग्रामिंग भाषा का इस्तेमाल करके, यह ट्यूटोरियल पूरा करें.
  3. इस ऐप्लिकेशन को अलग-अलग सोर्स या टारगेट भाषाओं के साथ काम करने के लिए बदलें.
  4. टेक्स्ट को एक से ज़्यादा भाषाओं में अनुवाद करने के लिए, इस ऐप्लिकेशन को अपग्रेड करें. साथ ही, टारगेट की गई उन भाषाओं का एक ड्रॉप-डाउन मेन्यू बनाने के लिए टेंप्लेट फ़ाइल में बदलाव करें जिनमें अनुवाद किया जा सकता है.

ज़्यादा जानें

Google App Engine

Google Cloud Functions

Google Cloud Run

Google Cloud Buildpacks, Container Registry, Artifact Registry

Google Cloud Translation और Google ML Kit

Google Cloud के अन्य प्रॉडक्ट/पेज

Python और Flask

लाइसेंस

इस ट्यूटोरियल के लिए, Creative Commons Attribution 2.0 जनरल लाइसेंस का इस्तेमाल किया गया है. वहीं, इस रिपॉज़िटरी में मौजूद सोर्स कोड के लिए Apache 2 लाइसेंस का इस्तेमाल किया गया है.