ماژول 3: مهاجرت از Google Cloud NDB به Cloud Datastore

1. بررسی اجمالی

هدف این سری از نرم‌افزارهای کد (آموزش‌های عملی و خودکار) این است که به توسعه‌دهندگان Google App Engine (محیط استاندارد) کمک کند تا برنامه‌های خود را با هدایت آنها از طریق یک سری مهاجرت مدرن‌سازی کنند. مهم‌ترین گام دور شدن از سرویس‌های همراه با زمان اجرا اصلی است زیرا زمان‌های اجرا نسل بعدی انعطاف‌پذیرتر هستند و گزینه‌های خدمات متنوع‌تری را در اختیار کاربران قرار می‌دهند. حرکت به نسل جدیدتر زمان اجرا به شما امکان می دهد تا راحت تر با محصولات Google Cloud ادغام شوید، از طیف وسیع تری از خدمات پشتیبانی شده استفاده کنید و از نسخه های زبان فعلی پشتیبانی کنید.

این آموزش اختیاری به توسعه دهندگان نشان می دهد که چگونه از Cloud NDB به Cloud Datastore به عنوان کتابخانه مشتری برای صحبت با سرویس Datastore مهاجرت کنند. توسعه‌دهندگانی که NDB را ترجیح می‌دهند، می‌توانند با آن بمانند، زیرا با پایتون 3 سازگار است، به همین دلیل است که این انتقال اختیاری است. این انتقال فقط برای کسانی است که می‌خواهند یک پایگاه کد ثابت و کتابخانه‌های مشترک با سایر برنامه‌هایی که قبلاً از Cloud Datastore استفاده می‌کنند بسازند. این در بخش "پس زمینه" توضیح داده شده است.

شما یاد خواهید گرفت که چگونه

  • از Cloud NDB استفاده کنید (اگر با آن آشنا نیستید)
  • از Cloud NDB به Cloud Datastore مهاجرت کنید
  • در ادامه برنامه خود را به پایتون 3 منتقل کنید

آنچه شما نیاز دارید

  • یک پروژه Google Cloud Platform با یک حساب صورتحساب GCP فعال
  • مهارت های پایه پایتون
  • دانش کاری دستورات پایه لینوکس
  • دانش اولیه توسعه و استقرار برنامه های App Engine
  • یک برنامه کاربردی Module 2 App Engine 2.x یا 3.x.

نظرسنجی

چگونه از این کد لبه استفاده خواهید کرد؟

فقط آن را بخوانید آن را بخوانید و تمرینات را کامل کنید

2. پس زمینه

در حالی که Cloud NDB یک راه حل عالی Datastore برای توسعه دهندگان قدیمی App Engine است و به انتقال به Python 3 کمک می کند، این تنها راهی نیست که توسعه دهندگان App Engine می توانند به Datastore دسترسی داشته باشند. هنگامی که Datastore App Engine در سال 2013 به محصول خود تبدیل شد ، Google Cloud Datastore ، یک کتابخانه مشتری جدید ایجاد شد تا همه کاربران بتوانند از Datastore استفاده کنند.

برنامه‌نویسان Python 3 App Engine و غیر App Engine باید از Cloud Datastore (نه Cloud NDB) استفاده کنند. توسعه دهندگان برنامه Python 2 App Engine تشویق می شوند که از ndb به Cloud NDB مهاجرت کنند و از آنجا به Python 3 پورت کنند، اما همچنین می توانند مهاجرت بیشتر به Cloud Datastore را نیز انتخاب کنند. این یک تصمیم منطقی است به ویژه برای توسعه دهندگانی که قبلاً کدهایی را با استفاده از Cloud Datastore دارند، مانند مواردی که ذکر شد، و مایلند کتابخانه های اشتراکی را در همه برنامه های خود ایجاد کنند. استفاده مجدد از کد همانند سازگاری کد بهترین روش است و هر دو به کاهش کلی هزینه نگهداری کمک می کنند، همانطور که در اینجا خلاصه می شود:

مهاجرت از Cloud NDB به Cloud Datastore

  • به توسعه دهندگان اجازه می دهد تا روی یک پایگاه کد واحد برای دسترسی به Datastore تمرکز کنند
  • از نگهداری برخی از کدها با استفاده از Cloud NDB و برخی دیگر با استفاده از Cloud Datastore جلوگیری می کند
  • سازگاری بیشتر در پایگاه کد و قابلیت استفاده مجدد کد بهتر را فراهم می کند
  • استفاده از کتابخانه‌های مشترک/اشتراک‌گذاری‌شده را فعال می‌کند، که به کاهش هزینه کلی نگهداری کمک می‌کند

این مهاجرت دارای این مراحل اولیه است:

  1. راه اندازی/پیش کار
  2. Cloud NDB را با کتابخانه های سرویس گیرنده Cloud Datastore جایگزین کنید
  3. برنامه را به روز کنید

3. راه اندازی/پیش کار

قبل از شروع بخش اصلی آموزش، بیایید پروژه خود را راه‌اندازی کنیم، کد را دریافت کنیم، سپس برنامه پایه را اجرا کنیم تا بدانیم با کد کار شروع کرده‌ایم.

1. پروژه راه اندازی

اگر ماژول 2 را تکمیل کرده‌اید، توصیه می‌کنیم از همان پروژه (و کد) دوباره استفاده کنید. از طرف دیگر، می توانید یک پروژه کاملاً جدید ایجاد کنید یا از پروژه موجود دیگری استفاده مجدد کنید. مطمئن شوید که پروژه دارای حساب صورتحساب فعال است و App Engine (برنامه) فعال است.

2. برنامه نمونه پایه را دریافت کنید

یکی از پیش نیازها داشتن یک برنامه نمونه کار با ماژول 2 است. اگر آن آموزش را کامل کردید از راه حل خود استفاده کنید. اکنون می‌توانید آن را تکمیل کنید (لینک بالا)، یا اگر می‌خواهید از آن صرفنظر کنید، مخزن ماژول 2 (لینک زیر) را کپی کنید.

چه از ما استفاده کنید چه از کد ما، کد ماژول 2 جایی است که ما شروع می کنیم. این کد ماژول 3 شما را در هر مرحله راهنمایی می کند، و پس از تکمیل، باید شبیه کد در نقطه FINISH باشد. نسخه های Python 2 و 3 این آموزش وجود دارد، بنابراین مخزن کد صحیح را در زیر بگیرید.

پایتون 2

دایرکتوری فایل های شروع ماژول 2 پایتون 2 (مال شما یا ما) باید به شکل زیر باشد:

$ ls
README.md               appengine_config.py     requirements.txt
app.yaml                main.py                 templates

اگر آموزش ماژول 2 را تکمیل کرده باشید، یک پوشه lib با Flask و وابستگی های آن نیز خواهید داشت. اگر پوشه lib ندارید، آن را با دستور pip install -t lib -r requirements.txt ایجاد کنید تا بتوانیم این برنامه پایه را در مرحله بعد اجرا کنیم. اگر هم پایتون 2 و هم 3 را نصب کرده اید، توصیه می کنیم از pip2 به جای pip استفاده کنید تا با پایتون 3 اشتباه نگیرید.

پایتون 3

دایرکتوری فایل های شروع ماژول 2 پایتون 3 (مال شما یا ما) باید به شکل زیر باشد:

$ ls
README.md               main.py                 templates
app.yaml                requirements.txt

نه lib و نه appengine_config.py برای پایتون 3 استفاده نمی شود.

3. (دوباره) استقرار برنامه ماژول 2

مراحل پیش‌کار باقی‌مانده برای اجرا اکنون:

  1. با ابزار خط فرمان gcloud مجدداً آشنا شوید (در صورت لزوم)
  2. (کد ماژول 1 را مجدداً در App Engine قرار دهید (در صورت لزوم)

هنگامی که آن مراحل را با موفقیت انجام دادید و عملیاتی بودن آن را تأیید کردید، در این آموزش به جلو می رویم و با فایل های پیکربندی شروع می کنیم.

4. Cloud NDB را با کتابخانه های سرویس گیرنده Cloud Datastore جایگزین کنید

تنها تغییر پیکربندی یک تعویض جزئی بسته در فایل requirements.txt شماست.

1. به روز رسانی requirements.txt

پس از تکمیل ماژول 2، فایل requirements.txt شما به شکل زیر بود:

  • قبل (پایتون 2 و 3):
Flask==1.1.2
google-cloud-ndb==1.7.1

با جایگزین کردن کتابخانه Cloud NDB ( google-cloud-ndb ) با آخرین نسخه کتابخانه Cloud Datastore ( google-cloud-datastore ) ، با در نظر گرفتن نسخه نهایی Cloud Datastore ، ورودی Flask را دست نخورده به requirements.txt کنید. که پایتون 2 سازگار است 1.15.3 است:

  • AFTER (پایتون 2):
Flask==1.1.2
google-cloud-datastore==1.15.3
  • AFTER (پایتون 3):
Flask==1.1.2
google-cloud-datastore==2.1.0

به خاطر داشته باشید که مخزن به طور منظم تر از این آموزش نگهداری می شود، بنابراین ممکن است فایل requirements.txt منعکس کننده نسخه های جدیدتر باشد. توصیه می‌کنیم از آخرین نسخه‌های هر کتابخانه استفاده کنید، اما اگر آنها کار نمی‌کنند، می‌توانید به نسخه قدیمی‌تر برگردید. شماره‌های نسخه‌های بالا جدیدترین نسخه‌های آخرین به‌روزرسانی این کد لبه هستند.

2. سایر فایل های پیکربندی

سایر فایل‌های پیکربندی، app.yaml و appengine_config.py ، باید نسبت به مرحله انتقال قبلی بدون تغییر باقی بمانند:

  • app.yaml باید (هنوز) به بسته‌های همراه شخص ثالث grpcio و setuptools اشاره کند.
  • appengine_config.py باید (هنوز) pkg_resources و google.appengine.ext.vendor را به منابع شخص ثالث در lib اشاره کند.

حال به سراغ فایل های برنامه می رویم.

5. فایل های برنامه را به روز کنید

هیچ تغییری در template/index.html وجود ندارد، اما چند به روز رسانی برای main.py وجود دارد.

1. واردات

کد شروع بخش واردات باید به صورت زیر باشد:

  • قبل از:
from flask import Flask, render_template, request
from google.cloud import ndb

وارد کردن google.cloud.ndb را با یکی برای Cloud Datastore جایگزین کنید: google.cloud.datastore . از آنجایی که کتابخانه سرویس گیرنده Datastore از ایجاد خودکار فیلد مهر زمانی در Entity پشتیبانی نمی کند، ماژول استاندارد datetime کتابخانه را نیز وارد کنید تا به صورت دستی ایجاد شود. طبق قرارداد، واردات استاندارد کتابخانه بالاتر از واردات بسته شخص ثالث است. وقتی این تغییرات را تمام کردید، باید به شکل زیر باشد:

  • بعد از:
from datetime import datetime
from flask import Flask, render_template, request
from google.cloud import datastore

2. مقداردهی اولیه و مدل داده

پس از مقداردهی اولیه Flask، برنامه نمونه ماژول 2 یک کلاس مدل داده NDB ایجاد می کند و فیلدهای آن به صورت زیر است:

  • قبل از:
app = Flask(__name__)
ds_client = ndb.Client()

class Visit(ndb.Model):
    visitor   = ndb.StringProperty()
    timestamp = ndb.DateTimeProperty(auto_now_add=True)

کتابخانه Cloud Datastore چنین کلاسی ندارد، بنابراین اعلان کلاس Visit را حذف کنید. شما همچنان برای صحبت با Datastore به یک کلاینت نیاز دارید، بنابراین ndb.Client() را به datastore.Client() تغییر دهید. کتابخانه Datastore «انعطاف‌پذیرتر» است و به شما امکان می‌دهد تا بدون «از پیش اعلام کردن» ساختار آنها مانند NDB، Entity ایجاد کنید. پس از این به روز رسانی، این بخش از main.py باید به شکل زیر باشد:

  • بعد از:
app = Flask(__name__)
ds_client = datastore.Client()

3. دسترسی به Datastore

مهاجرت به Cloud Datastore مستلزم تغییر نحوه ایجاد، ذخیره و جستجوی موجودیت های Datastore (در سطح کاربر) است. برای برنامه های شما، دشواری این انتقال به پیچیدگی کد Datastore شما بستگی دارد. در برنامه نمونه خود، سعی کردیم به‌روزرسانی را تا حد امکان ساده کنیم. کد شروع ما اینجاست:

  • قبل از:
def store_visit(remote_addr, user_agent):
    with ds_client.context():
        Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()

def fetch_visits(limit):
    with ds_client.context():
        return (v.to_dict() for v in Visit.query().order(
                -Visit.timestamp).fetch_page(limit)[0])

با Cloud Datastore، یک موجودیت عمومی ایجاد کنید و اشیاء گروه‌بندی‌شده در Entity خود را با یک «کلید» شناسایی کنید. رکورد داده را با یک شی JSON ( dict پایتون) از جفت های کلید-مقدار ایجاد کنید، سپس آن را با put() مورد انتظار در Datastore بنویسید. پرس و جو مشابه اما ساده تر با Datastore است. در اینجا می توانید ببینید که چگونه کد معادل Datastore متفاوت است:

  • بعد از:
def store_visit(remote_addr, user_agent):
    entity = datastore.Entity(key=ds_client.key('Visit'))
    entity.update({
        'timestamp': datetime.now(),
        'visitor': '{}: {}'.format(remote_addr, user_agent),
    })
    ds_client.put(entity)

def fetch_visits(limit):
    query = ds_client.query(kind='Visit')
    query.order = ['-timestamp']
    return query.fetch(limit=limit)

بدنه‌های تابع برای store_visit() و fetch_visits() را مانند بالا به‌روزرسانی کنید، امضای آنها را با نسخه قبلی یکسان نگه دارید. هیچ تغییری در root() اصلی handler وجود ندارد. پس از تکمیل این تغییرات، برنامه شما اکنون برای استفاده از Cloud Datastore و آماده آزمایش است.

6. خلاصه/پاکسازی

استقرار برنامه

برنامه خود را مجدداً با gcloud app deploy اجرا کنید و کارکرد برنامه را تأیید کنید. کد شما اکنون باید با آنچه در پوشه‌های مخزن ماژول 3 است مطابقت داشته باشد:

اگر بدون انجام هیچ یک از کدهای قبلی وارد این سری شده اید، خود برنامه تغییر نمی کند. تمام بازدیدهای صفحه اصلی وب ( / ) را ثبت می کند و وقتی به اندازه کافی از سایت بازدید کردید به این شکل به نظر می رسد:

برنامه visitme

برای تکمیل این کد ماژول 3 تبریک می گویم. اکنون می دانید که می توانید از کتابخانه های سرویس گیرنده Cloud NDB و Cloud Datastore برای دسترسی به Datastore استفاده کنید. با مهاجرت به دومی، اکنون می توانید از مزایای کتابخانه های مشترک، استفاده مجدد از کدهای رایج و کد برای ثبات و کاهش هزینه نگهداری بهره مند شوید.

اختیاری: تمیز کردن

در مورد تمیز کردن برای جلوگیری از دریافت صورت‌حساب تا زمانی که آماده باشید به آزمایشگاه کد مهاجرت بعدی بروید، چطور؟ به‌عنوان توسعه‌دهندگان موجود، احتمالاً از قبل از اطلاعات قیمت‌گذاری App Engine به‌روز هستید.

اختیاری: برنامه را غیرفعال کنید

اگر هنوز برای رفتن به آموزش بعدی آماده نیستید، برای جلوگیری از تحمیل هزینه ، برنامه خود را غیرفعال کنید . هنگامی که برای رفتن به کد بعدی آماده شدید، می توانید آن را دوباره فعال کنید. زمانی که برنامه شما غیرفعال است، هیچ ترافیکی برای دریافت هزینه دریافت نمی‌کند، اما مورد دیگری که می‌توانید برای آن صورت‌حساب دریافت کنید، استفاده از Datastore شما در صورت فراتر رفتن از سهمیه رایگان است، بنابراین به اندازه‌ای حذف کنید که تحت این محدودیت قرار بگیرید.

از طرف دیگر، اگر نمی‌خواهید مهاجرت را ادامه دهید و می‌خواهید همه چیز را به طور کامل حذف کنید، می‌توانید پروژه خود را خاموش کنید .

مراحل بعدی

از اینجا می توانید این ماژول های مهاجرت بعدی را کشف کنید:

  • پاداش ماژول 3: برای یادگیری نحوه پورت کردن به Python 3 و نسل بعدی App Engine، به بخش پاداش بروید.
  • ماژول 7: App Engine Push Task Queues (الزامی در صورت استفاده از [push] Task Queues)
    • وظایف فشار taskqueue موتور برنامه را به برنامه ماژول 1 اضافه می کند
    • کاربران را برای مهاجرت به Cloud Tasks در ماژول 8 آماده می کند
  • ماژول 4: با Docker به Cloud Run مهاجرت کنید
    • برنامه خود را برای اجرا در Cloud Run with Docker محفظه کنید
    • به شما امکان می دهد در پایتون 2 بمانید
  • ماژول 5: با Cloud Buildpacks به Cloud Run مهاجرت کنید
    • برنامه خود را برای اجرا در Cloud Run با Cloud Buildpacks کانتینری کنید
    • نیازی نیست در مورد Docker، کانتینرها یا Dockerfile چیزی بدانید
    • از شما می خواهد که قبلاً برنامه خود را به پایتون 3 منتقل کرده باشید
  • ماژول 6: مهاجرت به Cloud Firestore
    • برای دسترسی به ویژگی های Firebase به Cloud Firestore مهاجرت کنید
    • در حالی که Cloud Firestore از Python 2 پشتیبانی می کند، این کد لبه فقط در Python 3 در دسترس است.

7. جایزه: به پایتون 3 مهاجرت کنید

برای دسترسی به آخرین زمان اجرا و ویژگی های App Engine، توصیه می کنیم به Python 3 مهاجرت کنید. در برنامه نمونه ما، Datastore تنها سرویس داخلی بود که استفاده می کردیم، و از آنجایی که از ndb به Cloud NDB مهاجرت کرده ایم، اکنون می توانیم پورت به زمان اجرا پایتون 3 موتور برنامه.

نمای کلی

در حالی که انتقال به Python 3 در محدوده آموزش Google Cloud نیست، این بخش از Codelab به توسعه‌دهندگان ایده می‌دهد که چگونه زمان اجرا Python 3 App Engine متفاوت است. یکی از ویژگی‌های برجسته نسل بعدی زمان اجرا، دسترسی ساده به بسته‌های شخص ثالث است: نیازی به تعیین بسته‌های داخلی در app.yaml یا نیازی به کپی یا آپلود کتابخانه‌های غیر داخلی نیست. آنها به طور ضمنی از لیست شدن در requirements.txt نصب می شوند.

از آنجایی که نمونه ما بسیار ابتدایی است و Cloud Datastore با Python 2-3 سازگار است، هیچ کد برنامه ای نیازی به انتقال صریح به 3.x ندارد: برنامه روی 2.x و 3.x بدون تغییر اجرا می شود، به این معنی که تنها تغییرات مورد نیاز در پیکربندی هستند. در این مورد:

  1. app.yaml برای ارجاع به پایتون 3 ساده کنید و ارجاع به کتابخانه های شخص ثالث همراه را حذف کنید.
  2. appengine_config.py و پوشه lib حذف کنید زیرا دیگر ضروری نیستند.

فایل های برنامه main.py و templates/index.html بدون تغییر باقی می مانند.

به روز رسانی requirements.txt

نسخه نهایی Cloud Datastore که پایتون 2 را پشتیبانی می کند 1.15.3 است. با آخرین نسخه برای Python 3 (ممکن است در حال حاضر جدیدتر شده باشد) requirements.txt به روز کنید. زمانی که این آموزش نوشته شد، آخرین نسخه 2.1.0 بود، بنابراین آن خط را به شکل زیر ویرایش کنید (یا هر نسخه دیگری که باشد):

google-cloud-datastore==2.1.0

app.yaml ساده کنید

قبل از:

تنها تغییر واقعی برای این نمونه برنامه کوتاه کردن قابل توجه app.yaml است. برای یادآوری، آنچه در app.yaml در پایان ماژول 3 داشتیم، به شرح زیر است:

runtime: python27
threadsafe: yes
api_version: 1

handlers:
- url: /.*
  script: main.app

libraries:
- name: grpcio
  version: 1.0.0
- name: setuptools
  version: 36.6.0

بعد از:

در پایتون 3، دستورات threadsafe ، api_version و libraries همگی منسوخ شده‌اند. همه برنامه‌ها threadsafe فرض می‌شوند و api_version در Python 3 استفاده نمی‌شود. دیگر بسته‌های شخص ثالث داخلی از قبل روی سرویس‌های App Engine نصب نشده‌اند، بنابراین libraries نیز منسوخ شده‌اند. برای اطلاعات بیشتر در مورد این تغییرات ، اسناد مربوط به تغییرات app.yaml را بررسی کنید. در نتیجه، باید هر سه مورد را از app.yaml حذف کنید و به نسخه پشتیبانی شده پایتون 3 به روز کنید (به زیر مراجعه کنید).

اختیاری: استفاده از دستورالعمل handlers

علاوه بر این، دستورالعمل handlers که ترافیک را در برنامه های App Engine هدایت می کند نیز منسوخ شده است. از آنجایی که نسل بعدی زمان اجرا انتظار دارد که چارچوب های وب مدیریت مسیریابی برنامه ها را انجام دهند، همه «اسکریپت های هندلر» باید به « auto » تغییر کنند. با ترکیب تغییرات از بالا، به این app.yaml می رسید:

runtime: python38

handlers:
- url: /.*
  script: auto

از صفحه مرجع app.yaml درباره script: auto بیشتر بیاموزید.

حذف دستورالعمل handlers

از آنجایی که handlers منسوخ شده اند، می توانید کل بخش را نیز حذف کنید و یک app.yaml تک خطی باقی بگذارید:

runtime: python38

به طور پیش فرض، با این کار وب سرور Gunicorn WSGI راه اندازی می شود که برای همه برنامه ها در دسترس است. اگر با gunicorn آشنایی دارید، این فرمان زمانی است که به طور پیش‌فرض با barebones app.yaml اجرا می‌شود:

gunicorn main:app --workers 2 -c /config/gunicorn.py

اختیاری: استفاده از دستورالعمل entrypoint

با این حال، اگر برنامه شما به یک دستور راه اندازی خاص نیاز دارد، می توان آن را با یک دستورالعمل entrypoint مشخص کرد، که منجر به یک app.yaml می شود که به شکل زیر است:

runtime: python38
entrypoint: python main.py

این مثال به طور خاص درخواست می کند که از سرور توسعه Flask به جای gunicorn استفاده شود. کدی که سرور توسعه را راه‌اندازی می‌کند نیز باید به برنامه شما اضافه شود تا با افزودن این بخش کوچک به پایین main.py در رابط 0.0.0.0 در پورت 8080 راه‌اندازی شود:

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, debug=True)

از صفحه مرجع app.yaml درباره entrypoint بیشتر بیاموزید. نمونه‌های بیشتر و بهترین شیوه‌ها را می‌توانید در اسناد راه‌اندازی محیط استاندارد App Engine و همچنین اسناد راه‌اندازی محیط انعطاف‌پذیر App Engine پیدا کنید.

appengine_config.py و lib را حذف کنید

فایل appengine_config.py و پوشه lib حذف کنید. در مهاجرت به پایتون 3، App Engine بسته‌های فهرست شده در requirements.txt را دریافت و نصب می‌کند.

فایل پیکربندی appengine_config.py برای شناسایی کتابخانه‌ها/بسته‌های شخص ثالث استفاده می‌شود، خواه خودتان آنها را کپی کرده باشید یا از مواردی که قبلاً در سرورهای App Engine موجود است (تخته‌شده) استفاده کنید. هنگام انتقال به پایتون 3، خلاصه ای از تغییرات بزرگ عبارتند از:

  1. بدون دسته‌بندی از کتابخانه‌های شخص ثالث کپی شده (فهرست شده در requirements.txt )
  2. بدون pip install در پوشه lib ، به این معنی که دوره پوشه lib وجود ندارد
  3. هیچ فهرستی از کتابخانه های شخص ثالث داخلی در app.yaml وجود ندارد
  4. نیازی به ارجاع برنامه به کتابخانه های شخص ثالث نیست، بنابراین فایل appengine_config.py وجود ندارد

فهرست کردن همه کتابخانه های شخص ثالث مورد نیاز در requirements.txt تنها چیزی است که لازم است.

استقرار برنامه

برنامه خود را مجدداً راه اندازی کنید تا مطمئن شوید که کار می کند. همچنین می توانید تأیید کنید که راه حل شما چقدر به کد ماژول 3 نمونه پایتون 3 نزدیک است. برای تجسم تفاوت‌ها با پایتون 2، کد را با نسخه پایتون 2 آن مقایسه کنید.

بابت اتمام مرحله جایزه در ماژول 3 تبریک می گویم! از مستندات مربوط به آماده سازی فایل های پیکربندی برای زمان اجرا پایتون 3 دیدن کنید. در نهایت، خلاصه قبلی بالا را برای مراحل بعدی و پاکسازی مرور کنید.

در حال آماده سازی درخواست شما

هنگامی که زمان انتقال برنامه شما فرا می رسد، باید main.py و سایر فایل های برنامه خود را به 3.x پورت کنید، بنابراین بهترین روش این است که تمام تلاش خود را بکنید تا برنامه 2.x خود را "سازگار با فوروارد" کنید. ممکن است.

منابع آنلاین زیادی برای کمک به شما در انجام آن وجود دارد، اما برخی از نکات کلیدی:

  1. اطمینان حاصل کنید که همه وابستگی های برنامه کاملاً با 3.x سازگار هستند
  2. اطمینان حاصل کنید که برنامه شما حداقل روی 2.6 (ترجیحاً 2.7) اجرا می شود.
  3. اطمینان حاصل کنید که برنامه کل مجموعه آزمایشی را پشت سر می گذارد (و حداقل 80٪ پوشش)
  4. از کتابخانه های سازگاری مانند six ، Future و/یا Modernize استفاده کنید
  5. خود را در مورد تفاوت های 2.x در مقابل 3.x ناسازگار با کلیدها آموزش دهید
  6. هر ورودی/خروجی احتمالاً منجر به ناسازگاری رشته های یونیکد در مقابل بایت می شود

برنامه نمونه با در نظر گرفتن همه اینها طراحی شده است، بنابراین چرا برنامه روی 2.x و 3.x مستقیماً خارج از جعبه اجرا می‌شود، بنابراین ما می‌توانیم روی نشان دادن آنچه باید برای استفاده از پلتفرم نسل بعدی تغییر دهید تمرکز کنیم. .

8. منابع اضافی

مشکلات/بازخورد مربوط به ماژول کدهای ماژول مهاجرت موتور برنامه

اگر مشکلی در این کد لبه پیدا کردید، لطفاً قبل از تشکیل پرونده ابتدا مشکل خود را جستجو کنید. پیوندهایی برای جستجو و ایجاد مسائل جدید:

منابع مهاجرت

پیوندهای پوشه‌های مخزن برای ماژول 2 (START) و ماژول 3 (FINISH) را می‌توانید در جدول زیر پیدا کنید. همچنین می‌توانید از مخزن برای همه مهاجرت‌های App Engine که می‌توانید یک فایل ZIP را شبیه‌سازی یا دانلود کنید، دسترسی پیدا کنید.

Codelab

پایتون 2

پایتون 3

ماژول 2

کد

کد

ماژول 3

کد

کد

منابع App Engine

در زیر منابع اضافی در مورد این مهاجرت خاص آمده است: