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 جلوگیری می کند
- سازگاری بیشتر در پایگاه کد و قابلیت استفاده مجدد کد بهتر را فراهم می کند
- استفاده از کتابخانههای مشترک/اشتراکگذاریشده را فعال میکند، که به کاهش هزینه کلی نگهداری کمک میکند
این مهاجرت دارای این مراحل اولیه است:
- راه اندازی/پیش کار
- Cloud NDB را با کتابخانه های سرویس گیرنده Cloud Datastore جایگزین کنید
- برنامه را به روز کنید
3. راه اندازی/پیش کار
قبل از شروع بخش اصلی آموزش، بیایید پروژه خود را راهاندازی کنیم، کد را دریافت کنیم، سپس برنامه پایه را اجرا کنیم تا بدانیم با کد کار شروع کردهایم.
1. پروژه راه اندازی
اگر ماژول 2 را تکمیل کردهاید، توصیه میکنیم از همان پروژه (و کد) دوباره استفاده کنید. از طرف دیگر، می توانید یک پروژه کاملاً جدید ایجاد کنید یا از پروژه موجود دیگری استفاده مجدد کنید. مطمئن شوید که پروژه دارای حساب صورتحساب فعال است و App Engine (برنامه) فعال است.
2. برنامه نمونه پایه را دریافت کنید
یکی از پیش نیازها داشتن یک برنامه نمونه کار با ماژول 2 است. اگر آن آموزش را کامل کردید از راه حل خود استفاده کنید. اکنون میتوانید آن را تکمیل کنید (لینک بالا)، یا اگر میخواهید از آن صرفنظر کنید، مخزن ماژول 2 (لینک زیر) را کپی کنید.
چه از ما استفاده کنید چه از کد ما، کد ماژول 2 جایی است که ما شروع می کنیم. این کد ماژول 3 شما را در هر مرحله راهنمایی می کند، و پس از تکمیل، باید شبیه کد در نقطه FINISH باشد. نسخه های Python 2 و 3 این آموزش وجود دارد، بنابراین مخزن کد صحیح را در زیر بگیرید.
پایتون 2
- START: کد ماژول 2
- FINISH: کد ماژول 3
- مخزن کامل (برای شبیه سازی یا دانلود ZIP)
دایرکتوری فایل های شروع ماژول 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
- FINISH: مخزن ماژول 3
- مخزن کامل (برای شبیه سازی یا دانلود ZIP)
دایرکتوری فایل های شروع ماژول 2 پایتون 3 (مال شما یا ما) باید به شکل زیر باشد:
$ ls
README.md main.py templates
app.yaml requirements.txt
نه lib
و نه appengine_config.py
برای پایتون 3 استفاده نمی شود.
3. (دوباره) استقرار برنامه ماژول 2
مراحل پیشکار باقیمانده برای اجرا اکنون:
- با ابزار خط فرمان
gcloud
مجدداً آشنا شوید (در صورت لزوم) - (کد ماژول 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 است مطابقت داشته باشد:
اگر بدون انجام هیچ یک از کدهای قبلی وارد این سری شده اید، خود برنامه تغییر نمی کند. تمام بازدیدهای صفحه اصلی وب ( /
) را ثبت می کند و وقتی به اندازه کافی از سایت بازدید کردید به این شکل به نظر می رسد:
برای تکمیل این کد ماژول 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 بدون تغییر اجرا می شود، به این معنی که تنها تغییرات مورد نیاز در پیکربندی هستند. در این مورد:
-
app.yaml
برای ارجاع به پایتون 3 ساده کنید و ارجاع به کتابخانه های شخص ثالث همراه را حذف کنید. -
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، خلاصه ای از تغییرات بزرگ عبارتند از:
- بدون دستهبندی از کتابخانههای شخص ثالث کپی شده (فهرست شده در
requirements.txt
) - بدون
pip install
در پوشهlib
، به این معنی که دوره پوشهlib
وجود ندارد - هیچ فهرستی از کتابخانه های شخص ثالث داخلی در
app.yaml
وجود ندارد - نیازی به ارجاع برنامه به کتابخانه های شخص ثالث نیست، بنابراین فایل
appengine_config.py
وجود ندارد
فهرست کردن همه کتابخانه های شخص ثالث مورد نیاز در requirements.txt
تنها چیزی است که لازم است.
استقرار برنامه
برنامه خود را مجدداً راه اندازی کنید تا مطمئن شوید که کار می کند. همچنین می توانید تأیید کنید که راه حل شما چقدر به کد ماژول 3 نمونه پایتون 3 نزدیک است. برای تجسم تفاوتها با پایتون 2، کد را با نسخه پایتون 2 آن مقایسه کنید.
بابت اتمام مرحله جایزه در ماژول 3 تبریک می گویم! از مستندات مربوط به آماده سازی فایل های پیکربندی برای زمان اجرا پایتون 3 دیدن کنید. در نهایت، خلاصه قبلی بالا را برای مراحل بعدی و پاکسازی مرور کنید.
در حال آماده سازی درخواست شما
هنگامی که زمان انتقال برنامه شما فرا می رسد، باید main.py
و سایر فایل های برنامه خود را به 3.x پورت کنید، بنابراین بهترین روش این است که تمام تلاش خود را بکنید تا برنامه 2.x خود را "سازگار با فوروارد" کنید. ممکن است.
منابع آنلاین زیادی برای کمک به شما در انجام آن وجود دارد، اما برخی از نکات کلیدی:
- اطمینان حاصل کنید که همه وابستگی های برنامه کاملاً با 3.x سازگار هستند
- اطمینان حاصل کنید که برنامه شما حداقل روی 2.6 (ترجیحاً 2.7) اجرا می شود.
- اطمینان حاصل کنید که برنامه کل مجموعه آزمایشی را پشت سر می گذارد (و حداقل 80٪ پوشش)
- از کتابخانه های سازگاری مانند
six
، Future و/یا Modernize استفاده کنید - خود را در مورد تفاوت های 2.x در مقابل 3.x ناسازگار با کلیدها آموزش دهید
- هر ورودی/خروجی احتمالاً منجر به ناسازگاری رشته های یونیکد در مقابل بایت می شود
برنامه نمونه با در نظر گرفتن همه اینها طراحی شده است، بنابراین چرا برنامه روی 2.x و 3.x مستقیماً خارج از جعبه اجرا میشود، بنابراین ما میتوانیم روی نشان دادن آنچه باید برای استفاده از پلتفرم نسل بعدی تغییر دهید تمرکز کنیم. .
8. منابع اضافی
مشکلات/بازخورد مربوط به ماژول کدهای ماژول مهاجرت موتور برنامه
اگر مشکلی در این کد لبه پیدا کردید، لطفاً قبل از تشکیل پرونده ابتدا مشکل خود را جستجو کنید. پیوندهایی برای جستجو و ایجاد مسائل جدید:
منابع مهاجرت
پیوندهای پوشههای مخزن برای ماژول 2 (START) و ماژول 3 (FINISH) را میتوانید در جدول زیر پیدا کنید. همچنین میتوانید از مخزن برای همه مهاجرتهای App Engine که میتوانید یک فایل ZIP را شبیهسازی یا دانلود کنید، دسترسی پیدا کنید.
Codelab | پایتون 2 | پایتون 3 |
ماژول 3 |
منابع App Engine
در زیر منابع اضافی در مورد این مهاجرت خاص آمده است:
- مراجع Python Cloud NDB و Cloud Datastore
- مهاجرت به پایتون 3 و زمان اجرای نسل بعدی GAE
- ژنرال