פתרון בעיות בהתקנת חבילות PyPI

Managed Airflow (דור 3) | Managed Airflow (דור 2) | Managed Airflow (דור 1 מדור קודם)

בדף הזה מוסבר איך לפתור בעיות שקשורות להתנגשויות בין תלויות כשמתקינים חבילות PyPI בהתאמה אישית.

הבעיה הכי נפוצה בחבילות PyPI שאתם עלולים להיתקל בהן ב-Managed Airflow היא התנגשויות בין תלויות.

כשמציינים חבילת PyPI מותאמת אישית חדשה להתקנה, יכול להיות שהחבילה הזו או הגרסה שלה יגרמו להתנגשויות בין יחסי תלות לבין חבילות PyPI מותאמות אישית אחרות או חבילות שהותקנו מראש בסביבה. במקרה כזה, פעולת העדכון של הסביבה נכשלת עם שגיאה.

שגיאות ב-Cloud Build וב-in-cluster build

אם מתרחשת בעיה בחבילות, מוצגת הודעת שגיאה בשתי דרכים, בהתאם לאופן הפריסה של הסביבה:

  • Cloud Build. הודעת שגיאה וקישור ליומן של Cloud Build. לדוגמה:

    UPDATE operation on this environment failed 25 minutes ago with the
    following error message:
    Failed to install PyPI packages.  Check the Cloud Build log at ...
    
  • גרסאות build בתוך האשכול. הודעת שגיאה והמיקום של יומני הבנייה. לדוגמה:

    UPDATE operation on this environment failed 17 minutes ago with the
    following error message:
    Failed to install PyPI packages.  Check the in-cluster build logs for
    details. They can be found in the Environment logs under the build-log-*
    log name.
    

הצגת הודעת השגיאה המפורטת

כשחבילת התקנה נכשלת, pip מדווח על הודעת השגיאה המפורטת. אפשר למצוא את הודעת השגיאה הזו ביומני הבנייה.

איתור השגיאה pip ביומני Cloud Build

אפשר ללחוץ על הקישור מהודעת השגיאה של Cloud Build, או לאתר את יומני הבנייה:

  1. איתור יומני build:

    1. במסוף Google Cloud , עוברים לדף Build history.

      כניסה לדף Build history

    2. בוחרים את ה-build שנכשל כדי לראות את היומנים שלו.

  2. בלוג הבנייה, מחפשים את הודעת השגיאה מ-pip. לדוגמה:

    ERROR: apache-airflow-backport-providers-google 2021.2.5 has requirement
    google-cloud-logging<3.0.0,>=2.1.1, but you'll have google-cloud-logging
    1.15.0 which is incompatible.
    

איתור השגיאה pip ביומני בנייה באשכול

  1. איתור יומני build:

    1. במסוף Google Cloud , עוברים לדף Environments.

      מעבר אל Environments

    2. בוחרים את הסביבה.

    3. פותחים את הכרטיסייה יומנים.

    4. בוחרים באפשרות All logs (כל היומנים) > Composer logs (יומני Composer) > Builds (גרסאות Build) > Worker & Scheduler image (תמונת Worker ומתזמן).

    5. ברשימה הנפתחת חומרה, בוחרים באפשרות מידע.

  2. ביומנים שמוצגים:

    1. מאתרים את הודעת השגיאה installer.sh. לדוגמה:

      The command '/bin/sh -c bash installer.sh $COMPOSER_PYTHON_VERSION
      fail' returned a non-zero code: 1
      
    2. הודעות המידע שלמעלה כוללות את השגיאה המפורטת pip. לדוגמה:

      apache-airflow-backport-providers-google 2021.2.5 has requirement
      google-cloud-logging<3.0.0,>=2.1.1, but you have
      google-cloud-logging 1.15.0.
      

פסק זמן במהלך התקנת חבילת Python

בגרסאות האחרונות, התנהגות כלי השירות pip השתנתה כשמנסים לספק תלות. אם אי אפשר לספק את התלות שצוינה, pip עובר על כל הגרסאות הזמינות של חבילה.

כשמתקינים חבילה, קורים הדברים הבאים:

  1. אם החבילה כבר מותקנת מראש בסביבה שלכם והתלות ב-Python שציינתם לא דורשת שינויים, החבילה תישאר כמו שהיא.

    לדוגמה: aiodebug==2.3.0 מותקן ואתם מציינים aiodebug או aiodebug>=2.

  2. אם החבילה עדיין לא מותקנת בסביבה שלכם או שהיא לא עומדת בדרישות התלות של Python שציינתם, pip מנסה להשתמש בגרסה העדכנית ביותר שעומדת בדרישות התלות. זו הגרסה האחרונה של החבילה אם לא ציינתם גרסה, או הגרסה האחרונה של החבילה שעומדת בהגבלות שצוינו.

    דוגמה: אם מציינים aiodebug, הגרסה האחרונה תותקן (2.*.*). אם מציינים aiodebug<2, הגרסה 1.*.* תותקן.

    אם הגרסה הזו גורמת לסתירות בין תלויות לבין חבילות שהותקנו מראש, pip עובר על כל הגרסאות הזמינות של החבילה כדי לנסות לספק את התלות שצוינה. במקרה כזה, ההודעות הבאות יופיעו ביומן הבנייה:

    INFO: pip is looking at multiple versions of PYTHON_PACKAGE_NAME
    to determine which version is compatible with other requirements.
    This could take a while.
    

    לפני השינוי, pip נכשל בגלל סתירה בין תלות ללא בדיקה של גרסאות אחרות.

התהליך של בדיקת כל הגרסאות הזמינות יכול לקחת הרבה זמן, ויכול להוביל לשנמוך של חבילות או לזמן קצוב לתפוגה במהלך ההתקנה של חבילת Python.

חבילות שמותקנות מראש ב-Managed Airflow מתעדכנות באופן קבוע לגרסאות האחרונות מסיבות אבטחה. לכן, יכול להיות שיתרחש זמן קצוב לתפוגה גם כשמשדרגים סביבה לגרסה מאוחרת יותר של Managed Airflow.

פתרונות אפשריים:

  • עדכון קבוע של תלות מותאמת אישית ב-Python.

  • כדי לבודד קטעי קוד שדורשים חבילות סותרות, משתמשים ב-PythonVirtualenvOperator.

התנגשויות עם חבילות PyPI שהותקנו מראש

חלק מהבעיות שקשורות לחבילות מתרחשות בין חבילות PyPI מותאמות אישית שמתקינים לבין החבילות שמותקנות מראש.

אתם יכולים לראות את הרשימה המלאה של חבילות שהותקנו מראש בגרסה שלכם של Managed Airflow בדף גרסאות של Managed Airflow.

כדי לפתור את הבעיה, אתם יכולים:

שרת המטא-נתונים לא זמין כשמתקינים חבילות PyPI

אם בסביבה שלכם נעשה שימוש בקובץ pip.conf בהתאמה אישית, יכול להיות שתיתקלו בבעיה אם לא ניתן להתקין חבילות PyPI חדשות בסביבה שלכם. ביומנים של Cloud Build שקשורים לשגיאת ההתקנה של החבילה, יכולה להופיע הודעת האזהרה הבאה:

WARNING: Compute Engine Metadata server unavailable on attempt 3 of 3. Reason:
timed out
WARNING: Authentication failed using Compute Engine authentication due to
unavailable metadata server.

הבעיה הזו נגרמת בגלל קובץ pip.conf שלא מאפשר גישה לאינדקס חבילות ברירת המחדל בכתובת https://pypi.org/simple. לדוגמה, אם קובץ pip.conf מאפשר רק התקנה של חבילות ממאגר מותאם אישית של Artifact Registry בגלל הפרמטר index-url שהוגדר מחדש, לא תהיה אפשרות להתקין חבילות מאינדקס חבילות ברירת המחדל.

כדי לפתור את הבעיה, מוסיפים את https://pypi.org/simple package index לקובץ pip.conf. לדוגמה, אם אינדקס החבילות הראשי מוגדר בפרמטר index-url, מוסיפים את האינדקס https://pypi.org/simple בפרמטר extra-index-url.

המאמרים הבאים