פוסטים

מציג פוסטים מתאריך נובמבר, 2020

ניהול חבילות וסביבות בפייתון - pipenv

תמונה
בפוסט הקודם  דיברתי על היתרון של סביבה וירטואלית בפייתון והצגתי את הכלי venv. בשנת 2018 נוצר הכלי pipenv שמטרתו לפתור בעיות נפוצות ב pip, ב venv ובעבודה עם קובץ ה requirements עליו דיברנו בפוסט הקודם. הפוסט הבא מדבר על הכלי pipenv, משווה בינו לבין venv ו pip, ומציג כיצד pipenv פותר לנו חלק מהבעיות שלנו. מה הבעיה עם requirements.txt ואיך pipenv פותר לנו אותה? אז דיברנו על היכולות המרשימות שנותן קובץ ה requirements ובאיזו קלות ניתן למלא אותו עם pip freeze. אבל לצערנו הוא דורש לא מעט התעסקות ידנית בפרוייקטים מתקדמים יותר. דמיינו את המקרה הבא: אנחנו מתקינים את הספריה requests בגרסתה האחרונה (2.24.0) וכשאנחנו מתקינים אותה מותקנת לנו באופן אוטומטי גם תת-תלות (sub-dependency) בשם urllib3 בגרסה 1.25.11. עכשיו בואו נניח שהתעדכנה גרסה של התגלתה פרצת אבטחה ב urllib3 והם שחררו את גרסה 1.25.12. כעת, הקוד שלנו בפרודקשן רץ מול הגרסה הישנה. עלינו לעדכן את הגרסה כמה שיותר מהר. הבעיה היא שאת זאת נצטרך לעשות באופן ידני משום שקובץ ה requirements כובל אותנו לגרסה ספציפית אם מילאנו אותו עם pip freeze. קיימת

סביבות מבודדות בפייתון - venv

תמונה
הקדמה כשאנחנו עובדים עם פייתון ורוצים להשתמש ביכולות הקהילה העצומות שלה, נרצה להשתמש בחבילות שאנשים אחרים כתבו. לשם שיתוף החבילות, מפתחי פייתון יצרו את pip package installer for python שמטרתו לאפשר התקנה ושדרוג פשוטים של חבילות פייתון אל מול מקור מסוים. מי שכותב חבילה מסוימת יכול להעלות אותה אל שרת החבילות של פייתון pypi - python package index. ואז על מנת להתקין את החבילה כל מה שהמשתמש יצטרך לעשות זה לכתוב pip install package_name. בפרויקט בוגר בפייתון נוכל לראות שימוש גם בעשרות של חבילות, ולכל חבילה יכולות תלויות משל עצמה. מטרת הפוסט לדבר על איך סביבה וירטואלית עוזרת לנו להישאר שפויים תוך שימוש בספריות פייתון חיצוניות בתוך הקוד שלנו. למה צריך סביבה וירטואלית? דמיינו את המקרה הבא - התחלתי לכתוב את הפרויקט שלי ובמהלך כתיבתו הבנתי שעליי להתשמש בספריה requests בגרסה 1.0.0. אני עובד עם הגרסה הזו ומשתמש ב requests ואז לאחר כמה חודשים אני פותח פרויקט נוסף שבו עליי להשתמש ב requests בגרסה עד 0.8 משום שהחל מגרסה זו כבר אין תמיכה בפיצ׳ר מסוים בו אני משתמש (אל תנסו את זה בבית). תחת התיקייה של פ