1. بررسی اجمالی
هدف این سری از نرمافزارهای کد (آموزشهای عملی و خودکار) به توسعهدهندگان Google App Engine (استاندارد) کمک میکند تا برنامههای خود را با هدایت آنها از طریق یک سری مهاجرت مدرنسازی کنند. مهمترین گام دور شدن از سرویسهای همراه با زمان اجرا اصلی است زیرا زمانهای اجرا نسل بعدی انعطافپذیرتر هستند و گزینههای خدمات متنوعتری را در اختیار کاربران قرار میدهند. حرکت به نسل جدیدتر زمان اجرا به شما امکان می دهد تا راحت تر با محصولات Google Cloud ادغام شوید، از طیف وسیع تری از خدمات پشتیبانی شده استفاده کنید و از نسخه های زبان فعلی پشتیبانی کنید.
این آموزش به شما می آموزد که چگونه از کتابخانه سرویس گیرنده ndb
(پایگاه داده بعدی) داخلی App Engine به کتابخانه سرویس گیرنده Cloud NDB مهاجرت کنید.
شما یاد خواهید گرفت که چگونه
- از کتابخانه App Engine
ndb
استفاده کنید (اگر با آن آشنا نیستید) - از
ndb
به Cloud NDB مهاجرت کنید - در ادامه برنامه خود را به پایتون 3 منتقل کنید
آنچه شما نیاز دارید
- یک پروژه Google Cloud Platform با:
- مهارت های پایه پایتون
- دانش کاری دستورات رایج لینوکس
- دانش اولیه توسعه و استقرار برنامه های App Engine
- یک برنامه کاربردی Module 1 App Engine
نظرسنجی
چگونه از این کد لبه استفاده خواهید کرد؟
2. پس زمینه
در ماژول 1، چارچوب های وب را از webapp2
داخلی App Engine به Flask منتقل کردیم. در این کد لبه، با جابجایی از کتابخانه ndb
موتور برنامه به Google Cloud NDB به دور شدن از سرویسهای داخلی App Engine ادامه میدهیم.
از طریق تکمیل این مهاجرت، می توانید:
- به Python 3 و نسل بعدی برنامه App Engine مهاجرت کنید
- مهاجرت به Cloud Datastore (کتابخانه مشتری برای برنامههای غیرApp Engine)
- برنامه Python 2 (یا 3) خود را محفظه کنید و به Cloud Run مهاجرت کنید
- استفاده از App Engine (فشار) صف های کار را اضافه کنید و سپس به Cloud Tasks منتقل کنید
اما، ما هنوز آنجا نیستیم. قبل از در نظر گرفتن مراحل بعدی، این کد را تمام کنید. مهاجرت این آموزش شامل این مراحل اولیه است:
- راه اندازی/پیش کار
- کتابخانه Cloud NDB را اضافه کنید
- به روز رسانی فایل های برنامه
3. راه اندازی/پیش کار
قبل از شروع بخش اصلی آموزش، بیایید پروژه خود را راه اندازی کنیم، کد را دریافت کنیم، سپس برنامه پایه را اجرا کنیم تا بدانیم با کد کار شروع کرده ایم.
1. پروژه راه اندازی
اگر ماژول 1 را تکمیل کرده اید، توصیه می کنیم از همان پروژه (و کد) دوباره استفاده کنید. از طرف دیگر، می توانید یک پروژه کاملاً جدید ایجاد کنید یا از پروژه موجود دیگری استفاده مجدد کنید. مطمئن شوید که پروژه دارای حساب صورتحساب فعال است و App Engine فعال است.
2. برنامه نمونه پایه را دریافت کنید
یکی از پیش نیازها داشتن یک برنامه نمونه کار با ماژول 1 است. اگر آن آموزش را کامل کردید از راه حل خود استفاده کنید. اکنون میتوانید آن را تکمیل کنید (لینک بالا)، یا اگر میخواهید از آن صرفنظر کنید، سپس مخزن ماژول 1 (لینک زیر) را کپی کنید.
چه از ما استفاده کنید چه از کد ما، کد ماژول 1 جایی است که ما شروع می کنیم. این کد ماژول 2 شما را در هر مرحله راهنمایی می کند، و پس از تکمیل، باید شبیه کد در نقطه FINISH باشد (شامل یک پورت "پاداش" اختیاری از پایتون 2 تا 3):
- START: کد ماژول 1
- FINISH: کد پایتون 2 ماژول 2 (پاداش: کد پایتون 3 )
- مخزن کامل (برای شبیه سازی یا دانلود ZIP)
پوشه کد 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 را مستقر کنید
مراحل پیشکار باقیمانده برای اجرا اکنون:
- با ابزار خط فرمان
gcloud
مجدداً آشنا شوید (در صورت لزوم) - (کد ماژول 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
آنها را کپی نمی کنید. تنها الزامات:
- کتابخانه های داخلی را در
app.yaml
مشخص کنید - آنها را به سمت کتابخانه های شخص ثالث کپی شده ای که ممکن است با آنها کار کنند (در
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 است مطابقت داشته باشد.
اگر بدون انجام هیچ یک از کدهای قبلی وارد این سری شده اید، خود برنامه تغییر نمی کند. تمام بازدیدهای صفحه اصلی وب ( /
) را ثبت می کند و وقتی به اندازه کافی از سایت بازدید کردید به این شکل به نظر می رسد:
برای تکمیل این کد ماژول 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 بدون تغییر اجرا می شود، به این معنی که تنها تغییرات مورد نیاز در پیکربندی در این مورد است:
-
app.yaml
برای ارجاع به پایتون 3 ساده کنید و کتابخانه های شخص ثالث را حذف کنید. -
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، خلاصه ای از تغییرات بزرگ عبارتند از:
- بدون دستهبندی از کتابخانههای شخص ثالث کپی شده (فهرست شده در
requirements.txt
) - بدون
pip install
در پوشهlib
، به این معنی که دوره پوشهlib
وجود ندارد - هیچ فهرستی از کتابخانه های شخص ثالث داخلی در
app.yaml
وجود ندارد - نیازی به ارجاع برنامه به کتابخانه های شخص ثالث نیست، بنابراین فایل
appengine_config.py
وجود ندارد
فهرست کردن همه کتابخانه های شخص ثالث مورد نیاز در requirements.txt
تنها چیزی است که لازم است.
استقرار برنامه
برنامه خود را مجدداً راه اندازی کنید تا مطمئن شوید که کار می کند. همچنین می توانید تأیید کنید که راه حل شما چقدر به کد ماژول 2 نمونه پایتون 3 نزدیک است. برای تجسم تفاوتها با پایتون 2، کد را با نسخه پایتون 2 آن مقایسه کنید.
بابت اتمام مرحله جایزه در ماژول 2 تبریک می گویم! از مستندات مربوط به آماده سازی فایل های پیکربندی برای زمان اجرا پایتون 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. منابع اضافی
مشکلات/بازخورد مربوط به ماژول کدهای ماژول مهاجرت موتور برنامه
اگر مشکلی در این کد لبه پیدا کردید، لطفاً قبل از تشکیل پرونده ابتدا مشکل خود را جستجو کنید. پیوندهایی برای جستجو و ایجاد مسائل جدید:
منابع مهاجرت
پیوندهای پوشههای مخزن برای ماژول 1 (START) و ماژول 2 (FINISH) را میتوانید در جدول زیر پیدا کنید. همچنین میتوانید از مخزن برای همه انتقالهای نرمافزار App Engine که میتوانید یک فایل ZIP را شبیهسازی یا دانلود کنید، دسترسی پیدا کنید.
Codelab | پایتون 2 | پایتون 3 |
(n/a) | ||
ماژول 2 |
منابع App Engine
در زیر منابع اضافی در مورد این مهاجرت خاص آمده است:
- مراجع NDB پایتون
- (قدیمی) مهاجرت از Python 2.5 و
webapp
به 2.7 وwebapp2
- مهاجرت به پایتون 3 و زمان اجرای نسل بعدی GAE
- ژنرال