למה ואיך לעבוד עם סביבה וירטואלית בפייתון
המצב הרגיל הוא שכל הפרויקטים שאנחנו כותבים בפייתון תלויים באותם חבילות גלובליות שהתקנו על המחשב שלנו. הבעיה מתחילה כשאנחנו רוצים לעדכן את החבילות ואז חלק מהפרויקטים מפסיקים לעבוד בשל בעיית תאימות לאחור. הפתרון הוא שימוש בסביבה וירטואלית שמאפשרת לנהל את החבילות באופן נפרד עבור כל פרויקט. והאמת היא שאין דבר קל מכך בגלל שפייתון מציע את המודול 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) $ 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 כוכבים
גנר בתאריך: 11.02.2022
Thnx !!!
זהבית בתאריך: 11.02.2022
מהמם! הסבר מעולה, סוף סוף הבנתי מה זה סביבה וירטואלית