הכנת קובצי תצורה לסביבת זמן הריצה של Python 3

כדי להריץ את האפליקציה בסביבת זמן הריצה של Python 3 בסביבה הרגילה של App Engine, יכול להיות שתצטרכו לשנות חלק מקובצי ההגדרות שבהם נעשה שימוש ב-App Engine:

  • app.yaml. הקובץ הזה מכיל מידע על הקוד של האפליקציה, כמו זמן הריצה ומטפלי האפליקציה.

  • appengine_config.py. סביבת זמן הריצה של Python 2 משתמשת בקובץ הזה כדי לגשת לספריות של צד שלישי ולספק ערכים לקבועים ולפונקציות hook. סביבת זמן הריצה של Python 3 לא משתמשת בקובץ הזה.

מתבצע עדכון של app.yaml

ההתנהגות של חלק מהשדות בקובץ ההגדרות app.yaml השתנתה. צריך להסיר את השדות שכבר לא נתמכים ולעדכן את השדות האחרים כמו שמתואר בטבלה הבאה.

שדה סוג השינוי תיאור
app_engine_bundled_services רלוונטי רק ל-Python 3 מגדירים את השדה הזה כדי לגשת לחבילות שירותים ספציפיות מדור קודם ל-Python 3. מידע נוסף על הגדרות התצורה של app_engine_bundled_services זמין בהפניה לקובץ app.yaml.
api_version
application_readable
builtins
אין יותר תמיכה בגרסה הזו לא רלוונטי בסביבת זמן הריצה של Python 3.
threadsafe אין יותר תמיכה בגרסה הזו כל האפליקציות נחשבות כבטוחות לשימוש עם שרשורים. אם האפליקציה שלכם לא בטוחה לשימוש עם שרשורים, צריך לציין entrypoint ולהגדיר שרשור אחד לכל תהליך עובד.

לדוגמה, כשמשתמשים במחלקת המופעים F4:
entrypoint: gunicorn -b :$PORT -w 8 --threads 1 main:app

במאמר שיטות מומלצות לנקודות כניסה מפורט מספר התהליכים העובדים המומלץ לכל מחלקת מופעים.
ספריות אין יותר תמיכה בגרסה הזו משתמשים בקובץ requirements.txt כדי להצהיר על יחסי תלות ולהתקין ספריות לקוח.
handlers: login האפשרות הזו נתמכת אם מפעילים את Users API על ידי הגדרת האפשרות user ברשימה app_engine_bundled_services. אם אתם לא משתמשים בחבילת השירותים מדור קודם ל-Python 3, אתם יכולים להשתמש בניהול זהויות והרשאות גישה (IAM) לניהול משתמשים.
handlers: script השתנה בזמן הריצה של Python 2, משתמשים בשדה script כדי להפנות בקשות נכנסות לסקריפט של האפליקציה.

בזמן הריצה של Python 3, אתם נדרשים להשתמש ב-framework לאינטרנט עם ניתוב בתוך האפליקציה (כמו Flask או Django) במקום להשתמש בשדה script.

כדי להעביר את קובץ app.yaml לסביבת ההרצה של Python 3, מבצעים אחת מהפעולות הבאות, בהתאם לשאלה אם הקובץ מכיל handlers סטטיים וגם handlers של סקריפטים:

  • אם קובץ app.yaml מכיל רכיבי handler סטטיים, צריך לבצע אחת מהפעולות הבאות כדי לוודא שבקשות לתוכן דינמי מנותבות לסקריפט של האפליקציה:
    • מסירים את כל השדות script. אחר כך מוסיפים שדה entrypoint כדי להפעיל שרת אינטרנט שמריץ את האפליקציה. בקשות שלא תואמות לאף אחד מהמטפלים הסטטיים יופנו לשרת האינטרנט שצוין בשדה entrypoint. שרת האינטרנט ומסגרת האינטרנט של האפליקציה אחראים לניתוב הבקשה לסקריפט הנכון.
    • מחליפים את הערך של כל השדות script ב-auto. מערכת App Engine תפעיל את האפליקציה באופן אוטומטי בשרת אינטרנט (בהנחה שהאפליקציה עומדת בכמה דרישות), וכל הבקשות שתואמות ל-script handler יופנו לשרת האינטרנט. שרת האינטרנט ו-framework האינטרנט של האפליקציה אחראים לניתוב הבקשה לסקריפט הנכון.
    • אם קובץ app.yaml לא מכיל מטפלים סטטיים, צריך להסיר את כל השדות script. כל הבקשות לאפליקציה יופנו לשרת האינטרנט של האפליקציה, והמסגרת של האפליקציה תנתב את הבקשה לסקריפט הנכון. אפשר גם להוסיף שדה entrypoint כדי להתאים אישית את התנהגות ההפעלה שמוגדרת כברירת מחדל. אם קובץ app.yaml מכיל את שני סוגי המטפלים, עדיין אפשר להסיר את כל המטפלים בסקריפט שיסומנו כ-auto, ולהשאיר את המטפלים הסטטיים ואת המטפלים auto שדורשים הנחיות אחרות, כמו המטפל שמוגבל לאדמינים בדוגמה שלמטה.

הטיפול בקבצים סטטיים לא משתנה.

אם משתמשים בשדות שהוצאו משימוש, App Engine מחזיר שגיאה כשמפעילים את האפליקציה.

בדוגמאות הבאות אפשר לראות את ההבדלים בין קובצי app.yaml:

‫Python 2

runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /
  script: home.app

- url: /index\.html
  script: home.app

- url: /stylesheets
  static_dir: stylesheets

- url: /(.*\.(gif|png|jpg))$
  static_files: static/\1
  upload: static/.*\.(gif|png|jpg)$

- url: /admin/.*
  script: admin.app
  login: admin

- url: /.*
  script: not_found.app

‫Python 3

runtime: python314
app_engine_bundled_services:
#list your services

handlers:
- url: /stylesheets
  static_dir: stylesheets

- url: /(.*\.(gif|png|jpg))$
  static_files: static/\1
  upload: static/.*\.(gif|png|jpg)$

- url: /admin/.*
  script: auto
  login: admin
.

בתהליך הסרה של appengine_config.py

זמן הריצה של Python 2 בסביבה הרגילה של App Engine משתמש בקובץ appengine_config.py.

המערכת מתעלמת מהקובץ הזה בסביבת זמן הריצה של Python 3. במקום זאת, סביבת זמן הריצה של Python 3 משתמשת בקובץ requirements.txt הרגיל כדי להתקין יחסי תלות, כולל יחסי תלות שמשתמשים בקוד Native.