ماژول 2: از App Engine ndb به Cloud NDB مهاجرت کنید

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

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

این آموزش به شما می آموزد که چگونه از کتابخانه سرویس گیرنده ndb (پایگاه داده بعدی) داخلی App Engine به کتابخانه سرویس گیرنده Cloud NDB مهاجرت کنید.

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

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

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

نظرسنجی

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

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

2. پس زمینه

در ماژول 1، چارچوب های وب را از webapp2 داخلی App Engine به Flask منتقل کردیم. در این کد لبه، با جابجایی از کتابخانه ndb موتور برنامه به Google Cloud NDB به دور شدن از سرویس‌های داخلی App Engine ادامه می‌دهیم.

از طریق تکمیل این مهاجرت، می توانید:

  1. به Python 3 و نسل بعدی برنامه App Engine مهاجرت کنید
  2. مهاجرت به Cloud Datastore (کتابخانه مشتری برای برنامه‌های غیرApp Engine)
  3. برنامه Python 2 (یا 3) خود را محفظه کنید و به Cloud Run مهاجرت کنید
  4. استفاده از App Engine (فشار) صف های کار را اضافه کنید و سپس به Cloud Tasks منتقل کنید

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

  1. راه اندازی/پیش کار
  2. کتابخانه Cloud NDB را اضافه کنید
  3. به روز رسانی فایل های برنامه

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

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

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

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

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

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

چه از ما استفاده کنید چه از کد ما، کد ماژول 1 جایی است که ما شروع می کنیم. این کد ماژول 2 شما را در هر مرحله راهنمایی می کند، و پس از تکمیل، باید شبیه کد در نقطه FINISH باشد (شامل یک پورت "پاداش" اختیاری از پایتون 2 تا 3):

پوشه کد STARTing Module 1 شما باید محتویات زیر را داشته باشد:

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

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

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

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

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

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

4. فایل های پیکربندی را به روز کنید (کتابخانه Cloud NDB را اضافه کنید)

بسیاری از خدمات داخلی App Engine اصلی در محصولات خود شکوفا شده اند و Datastore یکی از آنهاست. امروزه برنامه‌های غیرApp Engine می‌توانند از Cloud Datastore استفاده کنند. برای کاربران قدیمی ndb ، تیم Google Cloud کتابخانه کلاینت Cloud NDB را برای صحبت با Cloud Datastore ایجاد کرده است. برای هر دو پایتون 2 و 3 در دسترس است.

بیایید فایل‌های تأیید را به‌روزرسانی کنیم تا App Engine ndb را با Cloud NDB جایگزین کنیم، سپس برنامه خود را اصلاح کنیم.

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

در ماژول 1، تنها وابستگی خارجی برای برنامه ما Flask بود. اکنون Cloud NDB را اضافه می کنیم. در پایان ماژول 1، فایل requirements.txt شما چه شکلی بود:

  • قبل از:
Flask==1.1.2

مهاجرت از App Engine ndb به کتابخانه Cloud NDB ( google-cloud-ndb ) نیاز دارد، بنابراین بسته آن را به requirements.txt اضافه کنید.

  • بعد از:
Flask==1.1.2
google-cloud-ndb==1.7.1

زمانی که این codelab نوشته شد، آخرین نسخه توصیه شده 1.7.1 است، اما requirements.txt موجود در مخزن ممکن است نسخه جدیدتری داشته باشد. ما آخرین نسخه‌های هر کتابخانه را توصیه می‌کنیم، اما اگر آنها کار نمی‌کنند، می‌توانید به نسخه قدیمی‌تر برگردید.

اگر پوشه lib خود را دارید و فقط آن را در بالا ایجاد نکرده اید، حذف کنید. اکنون کتابخانه های به روز شده را با دستور pip install -t lib -r requirements.txt مجدداً نصب کنید و در صورت لزوم به جای pip از pip2 استفاده کنید.

2. app.yaml را به روز کنید

افزودن کتابخانه‌های سرویس گیرنده Google Cloud مانند google-cloud-ndb نیازمندی‌های کمی است، که همگی حول محور گنجاندن کتابخانه‌های «ساخت‌شده» ، بسته‌های شخص ثالث از قبل در سرورهای Google در دسترس هستند. شما آنها را در requirements.txt لیست نمی کنید و با pip install آنها را کپی نمی کنید. تنها الزامات:

  1. کتابخانه های داخلی را در app.yaml مشخص کنید
  2. آنها را به سمت کتابخانه های شخص ثالث کپی شده ای که ممکن است با آنها کار کنند (در lib ) هدایت کنید

در اینجا STARTing app.yaml از ماژول 1 است:

  • قبل از:
runtime: python27
threadsafe: yes
api_version: 1

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

اکنون خطوط زیر را به app.yaml اضافه کنید تا به یک جفت بسته همراه شخص ثالث ارجاع دهید: grpcio و setuptools در بخش libraries جدید:

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

چرا از این کتابخانه های داخلی استفاده کنیم؟ gRPC یک چارچوب باز RPC است که توسط تمام کتابخانه های سرویس گیرنده Google Cloud از جمله google-cloud-ndb استفاده می شود. کتابخانه grpcio آداپتور gRPC پایتون است و بنابراین مورد نیاز است. استدلال برای گنجاندن setuptools در حال آمدن است.

  • بعد از:

با تغییرات بالا، app.yaml به روز شده شما اکنون باید به شکل زیر باشد:

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. appengine_config.py را به روز کنید

ابزار pkg_resources ، بخشی از کتابخانه setuptools ، برای دسترسی کتابخانه‌های شخص ثالث داخلی به کتابخانه‌های همراه استفاده می‌شود. appengine_config.py به‌روزرسانی کنید تا از pkg_resources برای اشاره به کتابخانه‌های همراه در lib استفاده کنید. وقتی این تغییر را تکمیل کردید، کل فایل باید به شکل زیر باشد:

import pkg_resources
from google.appengine.ext import vendor

# Set PATH to your libraries folder.
PATH = 'lib'
# Add libraries installed in the PATH folder.
vendor.add(PATH)
# Add libraries to pkg_resources working set to find the distribution.
pkg_resources.working_set.add_entry(PATH)

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

با خارج شدن تشریفات فایل پیکربندی، اکنون می توانید از ndb به Cloud NDB مهاجرت کنید. برای تکمیل انتقال، کتابخانه های وارد شده را به روز کنید و استفاده از مدیریت زمینه را در main.py اضافه کنید.

1. واردات

مبادله واردات زیر را در main.py انجام دهید:

  • قبل از
from google.appengine.ext import ndb
  • بعد از:
from google.cloud import ndb

تغییر از کتابخانه App Engine به کتابخانه Google Cloud گاهی اوقات به اندازه این نمونه ظریف است. برای سرویس‌های داخلی که به محصولات کامل Google Cloud تبدیل شده‌اند، به جای google.appengine ، ویژگی‌ها را از google.cloud وارد می‌کنید.

2. دسترسی به Datastore

برای اینکه بتوانید از کتابخانه Cloud NDB استفاده کنید، برنامه شما باید از مدیران زمینه پایتون استفاده کند. هدف آنها ایجاد "دروازه" دسترسی به منابع است که باید قبل از استفاده از آنها به دست آید. مدیران زمینه مبتنی بر تکنیک کنترل علوم کامپیوتری هستند که به عنوان تخصیص منابع اولیه (یا RAII) شناخته می شود. مدیران زمینه با فایل‌های پایتون (که باید قبل از دسترسی به آنها باز شوند) استفاده می‌شوند و همزمان، « قفل‌های چرخشی » باید قبل از اجرای کد در یک « بخش بحرانی » به‌دست آیند.

به طور مشابه، Cloud NDB شما را ملزم می‌کند تا پیش از اجرای هر دستور Datastore، زمینه یک کلاینت را برای برقراری ارتباط با Datastore به دست آورید. ابتدا یک کلاینت ( ndb.Client() ) با افزودن ds_client = ndb.Client() در main.py درست بعد از مقداردهی اولیه Flask ایجاد کنید:

app = Flask(__name__)
ds_client = ndb.Client()

دستور Python with صرفاً برای بدست آوردن زمینه یک شیء استفاده می شود. هر بلوک کد دسترسی به Datastore را with دستورات بپیچید.

در زیر همان توابع ماژول 1 برای نوشتن یک Entity جدید در Datastore و خواندن برای نمایش جدیدترین Entities اضافه شده است:

  • قبل از:

این کد اصلی بدون مدیریت زمینه است:

def store_visit(remote_addr, user_agent):
    'create new Visit entity in Datastore'
    Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()

def fetch_visits(limit):
    'get most recent visits'
    return (v.to_dict() for v in Visit.query().order(
            -Visit.timestamp).fetch(limit))
  • بعد از:

اکنون with ds_client.context(): اضافه کنید و کد دسترسی Datastore خود را به بلوک with منتقل کنید:

def store_visit(remote_addr, user_agent):
    'create new Visit entity in Datastore'
    with ds_client.context():
        Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()

def fetch_visits(limit):
    'get most recent visits'
    with ds_client.context():
        return (v.to_dict() for v in Visit.query().order(
                -Visit.timestamp).fetch(limit))

برنامه درایور اصلی با آنچه ما از ماژول 1 داشتیم یکسان می ماند زیرا هیچ کد ndb (و نه Cloud NDB) در اینجا وجود ندارد:

@app.route('/')
def root():
    'main application (GET) handler'
    store_visit(request.remote_addr, request.user_agent)
    visits = fetch_visits(10)
    return render_template('index.html', visits=visits)

بهترین روش اطمینان از تمایز واضح بین کد برنامه و دسترسی به داده است. به این ترتیب، زمانی که مکانیسم ذخیره سازی داده ها تغییر می کند، کد برنامه اصلی شما تغییر نمی کند، همانطور که با این انتقال انجام دادیم.

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

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

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

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

برنامه visitme

برای تکمیل این کد ماژول 2 تبریک می گویم. شما به تازگی از خط پایان عبور کرده‌اید، زیرا این آخرین مورد از مهاجرت‌های شدیداً توصیه‌شده در این سری تا آنجایی است که Datastore پیش می‌رود.

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

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

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

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

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

مراحل بعدی

از اینجا، انعطاف پذیری برای حرکت بعدی شما وجود دارد. یکی از این گزینه ها را انتخاب کنید:

  • پاداش ماژول 2: برای بررسی انتقال به 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 منتقل کرده باشید
  • ماژول 3:
    • دسترسی به Datastore را از Cloud NDB به Cloud Datastore مدرن کنید
    • این کتابخانه ای است که برای برنامه های Python 3 App Engine و برنامه های غیر App Engine استفاده می شود

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 NDB با Python 2-3 سازگار است، هیچ کد برنامه ای نیازی به انتقال صریح به 3.x ندارد. برنامه روی 2.x و 3.x بدون تغییر اجرا می شود، به این معنی که تنها تغییرات مورد نیاز در پیکربندی در این مورد است:

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

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

app.yaml ساده کنید

قبل از:

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

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

درباره 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)

درباره entrypoint از صفحه مستندات آن بیشتر بیاموزید. نمونه‌های بیشتر و بهترین روش‌ها را می‌توانید در اسناد راه‌اندازی استاندارد App Engine و همچنین اسناد راه‌اندازی App Engine Flexible پیدا کنید.

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 تنها چیزی است که لازم است.

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

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

بابت اتمام مرحله جایزه در ماژول 2 تبریک می گویم! از مستندات مربوط به آماده سازی فایل های پیکربندی برای زمان اجرا پایتون 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. منابع اضافی

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

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

منابع مهاجرت

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

Codelab

پایتون 2

پایتون 3

ماژول 1

کد

(n/a)

ماژول 2

کد

کد

منابع App Engine

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