לדלג לתוכן

סביבות וירטואליות בפייתון - venv מול conda מול poetry

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

הבעיה שכולם באים לפתור

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

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

venv - הכלי המובנה

venv הוא הפתרון שמגיע מובנה עם פייתון עצמו, בלי צורך להתקין שום דבר נוסף. מריצים python -m venv .venv, מפעילים את הסביבה, ומשם והלאה כל התקנה עם pip נכנסת רק לתיקייה הזו ולא משפיעה על שאר המערכת.

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

conda - כשצריך יותר מספריות פייתון

conda נולד בעולם ה-Data Science, ופותר בעיה שvenv לא נוגע בה בכלל - לפעמים ספרייה לא צריכה רק חבילת פייתון, אלא גם תלות בינארית מורכבת, כמו ספריות C או מנועי חישוב מותקנים במיוחד, למשל כאלה שמנצלים כרטיס מסך. conda מנהל גם את התלויות ה"לא פייתוניות" האלה, ולא רק חבילות pip רגילות.

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

poetry - ניהול תלויות לפרויקט אמיתי

poetry הוא כלי מודרני יותר שמסתכל על הבעיה מזווית שונה - לא רק "איך מתקינים ספריות בבידוד", אלא "איך מנהלים פרויקט פייתון אמיתי לאורך זמן, עם כל התלויות שלו, בצורה שחוזרת על עצמה באופן זהה אצל כל מי שמריץ אותו".

poetry מחליף את הצירוף המוכר של requirements.txt ידני עם קובץ תצורה אחד ברור, ומייצר אוטומטית קובץ נעילה - lock file - שנועל את הגרסה המדויקת של כל תלות, כולל תלויות עקיפות. זה אומר שאם מפתח אחד מתקין את הפרויקט היום ומפתח אחר מתקין אותו בעוד חצי שנה, שניהם יקבלו בדיוק אותן גרסאות, בלי הפתעות. poetry גם מטפל בתהליך בניית והפצת חבילה, מה שהופך אותו לבחירה טובה לא רק לפרויקט פנימי אלא גם לספרייה שמפרסמים לעולם.

אז מה בוחרים בפועל

אין תשובה אחת נכונה, יש הקשר:

  • venv עם pip - הבחירה הטבעית לסקריפט פשוט, לתרגול, וללימוד. אין סיבה להוסיף מורכבות כשלא צריך אותה.
  • poetry - הבחירה הנכונה לפרויקט אמיתי - אפליקציה, שירות, או ספרייה שמפרסמים - שבו חשוב שההתקנה תהיה זהה בכל מכונה ולכל מפתח בצוות.
  • conda - הבחירה כשעובדים בעולם מדע הנתונים או למידת מכונה, ויש תלויות בינאריות כבדות שקשה לנהל בדרך אחרת.

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

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

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

הצטרפו לקהילה בדיסקורד