למה ואיך לעבוד עם סביבה וירטואלית בפייתון
המצב הרגיל הוא שכל הפרויקטים שאנחנו כותבים בפייתון תלויים באותם חבילות גלובליות שהתקנו על המחשב שלנו. הבעיה מתחילה כשאנחנו רוצים לעדכן את החבילות ואז חלק מהפרויקטים מפסיקים לעבוד בשל בעיית תאימות לאחור. הפתרון הוא שימוש בסביבה וירטואלית שמאפשרת לנהל את החבילות באופן נפרד עבור כל פרויקט. והאמת היא שאין דבר קל מכך בגלל שפייתון מציע את המודול venv לניהול סביבה וירטואלית כחלק מהספרייה הסטנדרטית מה שאומר שלא צריך להתקין אותו.
את המדריך פיתחתי על הלינוקס שלי. הוא צריך לעבוד גם על מק.
תחילת עבודה עם סביבה וירטואלית
מתוך הטרמינל מנווטים לתיקיית הפרויקט שבו רוצים ליצור את הסביבה הוירטואלית.
לדוגמה, ניצור תיקייה ששמה my_project:
$ mkdir my_project
ננווט לתוכה:
$ cd my_project/
ונקליד פקודה שמקימה סביבה וירטואלית ששמה venv:
$ python3 -m venv venv
- לסביבה הוירטואלית אפשר לקרוא גם בשם אחר אבל מקובל לקרוא לה venv.
אחרי שיצרנו את הסביבה הוירטואלית נפעיל אותה:
$ source venv/bin/activate
ההפעלה תגרום להצגת שם הסביבה הוירטואלית בטרמינל:
(venv) $
- עכשיו אנחנו פועלים בתוך הסביבה הוירטואלית.
נבדוק היכן הפייתון נמצא במערכת הקבצים:
(venv) $ which python
התוצאה:
/my_project/venv/bin/python
מה הגרסה?
(venv) $ python --version
התוצאה:
Python 3.10.6
- זו לא ההתקנה הגלובלית של פייתון. הפייתון איתו הסביבה עובדת נמצא בתוך התיקייה.
ניהול חבילות כשעובדים בסביבה וירטואלית
כל הרעיון של סביבה וירטואלית הוא שנוכל לנהל בתוכה חבילות קוד. אז יאללה לעבודה.
אילו חבילות מותקנות בסביבה?
(venv) $ pip list
התוצאה:
Package Version
------------- -------
pip 20.1.1
pkg-resources 0.0.0
setuptools 44.0.0
מעט מאוד חבילות. את כל היתר נצטרך להתקין.
לדוגמה, נתקין את flask:
(venv) $ pip install Flask
אילו חבילות מותקנות עכשיו בסביבה?
(venv) $ pip list
התוצאה:
Package Version
------------- -------
click 7.1.2
Flask 1.1.2
itsdangerous 1.1.0
Jinja2 2.11.3
MarkupSafe 1.1.1
pip 20.1.1
pkg-resources 0.0.0
setuptools 44.0.0
Werkzeug 1.0.1
- הספרייה הותקנה עם כל התלוית שלה.
אפשר להתקין גרסה מסוימת של ספרייה. לדוגמה, גרסה 2.24.0 של requests:
(venv) $ python -m pip install requests==2.24.0
ואפשר לעדכן את אחת החבילות.
נעדכן את requests לגרסה החדישה ביותר:
(venv) $ python -m pip install --upgrade requests
כדי להסיר חבילות נזין את הפקודה pip uninstall שאחריה שמות החבילות שאנו מעוניינים להסיר.
ייצוא סביבת העבודה הוירטואלית
לא אחת קורה שפרויקט שעבדת עליו מאוד קשה לא עובד בגלל שמישהו שינה משהו באחת החבילות בהם הפרויקט תלוי. זה במיוחד נכון כשאתה עובד עם אנשים אחרים שמנסים לשחזר את התוצאות המופלאות שלך ללא הצלחה. אז כדי למנוע את המצב יש אפשרות לייצא את הסביבה הוירטואלית. לשם כך, נשתמש בפקודה freeze אותה נתעל לקובץ requirements.txt:
(venv) $ pip freeze > requirements.txt
- בתוך הקובץ requirements.txt רשומות עכשיו גרסאות הספריות בהם הפרויקט תלוי בפורמט שהסביבה הוירטואלית יודעת לעבוד איתו.
נקים פרויקט נוסף כדי לייבא לתוכו את התלויות.
אבל קודם כדאי שנצא מהסביבה על ידי הרצת הפקודה:
(venv) $ deactivate
ועכשיו כשאנחנו מחוץ לסביבה, ניצור תיקייה של פרויקט נוסף ששמו my_other_project:
$ mkdir my_other_project/
נכנס לתוך התיקייה:
$ cd my_other_project/
ניצור סביבה וירטואלית לה נקרא בהתאם לקונבנציה venv:
$ python3 -m venv venv
נפעיל את הסביבה:
$ source venv/bin/activate
ועכשיו, בתוך הסביבה החדשה, נתקין את התלוית הרשומות בקובץ requirements.txt באמצעות הפקודה:
(venv) $ python3 -m pip install -r requirements.txt
- שימו לב לנתיב של requirement.txt
אילו חבילות מותקנות?
(my_other_project_env) $ pip list
מחיקת סביבת העבודה
כדי למחוק את סביבת העבודה כל מה שאנחנו צריכים לעשות הוא למחוק את התיקייה.
נצא מסביבת העבודה:
(venv) $ deactivate
ונמחק את התיקייה:
$ rm -rf venv/
מבנה התיקיות כשעובדים עם סביבה וירטואלית
את כל הסקריפטים והתיקיות שאנחנו יוצרים נקפיד למקם בתוך תיקיית הפרויקט מחוץ לתיקיית venv כדי שנוכל לשנות את הסביבה כרצוננו בלי למחוק בטעות את הקבצים שלנו.
בנוסף, כשעובדים עם git מוסיפים את שם התיקייה (venv) לקובץ gitignore כדי שלא יעלה למאגר המרוחק. מה שכן מעלים למאגר המרוחק הוא את הקובץ requirements.txt כדי שאפשר יהיה לשחזר באמצעותו את החבילות בהם הפרויקט תלוי.
לכל המדריכים בסדרה ללימוד פייתון
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.