Menu

סביבות וירטואליות ב-Python: venv, הפעלה ו-requirements.txt

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

הבעיה שסביבות וירטואליות פותרות

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

  • פרויקט A צריך django==3.2. פרויקט B צריך django==5.0. רק לאחד מהם הגרסה שלו יכולה להיות מותקנת גלובלית.
  • אתם רוצים לנסות ספרייה חדשה, אבל לא רוצים שהיא תלכלך כל פרויקט אחר במחשב.
  • חבר צוות משכפל את ה-repo שלכם ואין לו מושג באילו גרסאות של אילו חבילות הייתם תלויים בפועל.

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

יצירת סביבה עם venv

venv מגיע עם Python 3, אין מה להתקין. מתוך תיקיית הפרויקט:

python3 -m venv .venv

זה יוצר תיקיית .venv/ ליד הקוד שלכם. השם .venv הוא מוסכמה כמעט אוניברסלית: הנקודה בהתחלה מסתירה אותה מרוב רשימות התיקיות, ועורכים כמו VS Code מזהים אותה אוטומטית.

אחרי שהפקודה מסתיימת, התיקייה מכילה התקנת Python מלאה (עשרות מגה-בייטים, וזה נורמלי) ו-pip משלה.

הפעלת הסביבה

ההפעלה משכתבת את ה-PATH של ה-shell שלכם כך ש-python ו-pip יפנו לאלה שבתוך .venv/. הפקודה תלויה בפלטפורמה:

# macOS / Linux
source .venv/bin/activate

# Windows (Command Prompt)
.venv\Scripts\activate.bat

# Windows (PowerShell)
.venv\Scripts\Activate.ps1

שורת הפקודה מקבלת קידומת (.venv) כל עוד הסביבה פעילה, תזכורת חזותית. כל pip install שתריצו עכשיו משפיע רק על הפרויקט הזה.

כשסיימתם להיום, deactivate מחזיר את המצב הקודם:

deactivate

לא צריך לבטל את ההפעלה לפני שסוגרים את הטרמינל: יציאה מה-shell היא אותו דבר.

התקנת חבילות

כשהסביבה פעילה, התקינו את מה שאתם צריכים:

pip install requests
pip install "pandas>=2.0"
pip install --upgrade requests

בדקו מה מותקן עם pip list. הסירו משהו עם pip uninstall requests.

החבילות המותקנות נמצאות תחת .venv/lib/pythonX.Y/site-packages/. אף פעם לא עורכים אותן ידנית: pip מנהל את התיקייה.

נעיצת תלויות עם requirements.txt

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

pip freeze > requirements.txt

pip freeze מדפיס כל חבילה מותקנת עם הגרסה המדויקת שלה. בצעו commit לקובץ ב-git.

כששותף (או אתם בעתיד על מחשב חדש) משכפל את ה-repo:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

שלוש פקודות, והסביבה שלו תואמת לשלכם.

הגדרת פרויקט נפוצה

כל תהליך העבודה, מההתחלה ועד הסוף:

# יצירת תיקיית הפרויקט
mkdir my_tool && cd my_tool

# יצירה והפעלה של ה-venv
python3 -m venv .venv
source .venv/bin/activate

# התקנת תלויות
pip install requests rich

# שמירה שלהן
pip freeze > requirements.txt

# עבודה על הקוד...
echo "import requests; print(requests.__version__)" > main.py
python main.py

# כשמסיימים
deactivate

הוסיפו את .venv ל-.gitignore

אף פעם אל תבצעו commit לתיקיית .venv/. היא תלויה בפלטפורמה וניתנת לשחזור מ-requirements.txt:

# .gitignore
.venv/
__pycache__/
*.pyc

commit שלה היה מנפח את ה-repo, נשבר במחשבים אחרים ומדליף את כל הקבצים הבינאריים הייחודיים למערכת ההפעלה שיש למפרש שלכם.

איזו גרסת Python?

כברירת מחדל, python3 -m venv .venv משתמש ב-python3 שה-shell שלכם מוצא. אם מותקנות אצלכם כמה גרסאות Python (נניח 3.12 ו-3.13), ציינו במפורש באיזו:

python3.13 -m venv .venv

ברגע שה-venv קיים, המפרש שלו נעוץ: הרצת python בתוך ה-venv המופעל תמיד משתמשת בגרסה הספציפית הזו, גם אם ה-Python של המערכת משתנה.

כשדברים משתבשים

כמה תסמינים נפוצים ותיקונים:

  • pip install עובד, אבל הייבוא שלי נכשל. התקנתם ל-Python הלא נכון. הפעילו את ה-venv לפני pip install, ובדקו שוב עם which python (macOS/Linux) או where python (Windows).
  • "ModuleNotFoundError" אחרי ההפעלה. ה-venv נוצר בלי ספריות מסוימות, או שהחבילה הותקנה ל-venv אחר. pip list מראה מה יש בפועל ב-venv הנוכחי.
  • סקריפט ההפעלה לא נמצא ב-Windows. PowerShell עשוי לחסום סקריפטים לא חתומים. הריצו פעם אחת Set-ExecutionPolicy -Scope CurrentUser RemoteSigned כדי לאפשר סקריפטים מקומיים.
  • "No module named venv". בחלק מהפצות Linux, venv היא חבילה נפרדת. sudo apt install python3-venv ב-Debian/Ubuntu.

מעבר ל-venv: Poetry, uv, pipenv

כשתרגישו בנוח עם venv + pip + requirements.txt, תיתקלו בכלים שעוטפים את אותם רעיונות בנוחות רבה יותר:

  • Poetry: מנהל venvs, תלויות ואריזה עם pyproject.toml יחיד.
  • uv: תחליף מהיר מאוד ל-pip, שמטפל גם ב-venvs.
  • pipenv: כלי ותיק יותר שהפך את הדפוס "Pipfile + Pipfile.lock" לפופולרי.

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

מה לקחת מכאן

  • כל פרויקט Python אמיתי מקבל סביבה וירטואלית משלו.
  • צרו אחת עם python3 -m venv .venv, הפעילו אותה, ואז הריצו pip install בחופשיות.
  • נעצו תלויות עם pip freeze > requirements.txt ובצעו commit לקובץ.
  • אף פעם אל תבצעו commit לתיקיית .venv/ עצמה.
  • כשייבוא מתנהג מוזר, בדקו קודם איזה Python פעיל.

הצעד הבא: הדפוס __main__

אחרי שהגדרתם פרויקט והתקנתם חבילות, ביטוי אחרון סוגר את הפרק הזה: ה-guard if __name__ == "__main__". הוא נמצא כמעט בכל קובץ Python שנועד לרוץ כסקריפט, והוא הנושא של העמוד הבא.

שאלות נפוצות

מה זו סביבה וירטואלית ב-Python?

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

איך יוצרים סביבה וירטואלית ב-Python?

הריצו python3 -m venv .venv בתוך תיקיית הפרויקט. זה יוצר תיקיית .venv עם התקנת Python חדשה. הפעילו אותה עם source .venv/bin/activate ב-macOS/Linux או עם .venv\Scripts\activate ב-Windows. מעכשיו pip install משפיע רק על הפרויקט הזה.

האם כל פרויקט Python צריך סביבה וירטואלית?

לכל דבר שמעבר לסקריפט חד-פעמי, כן. היא מונעת התנגשויות גרסאות בין פרויקטים, הופכת את התלויות למפורשות בקובץ requirements.txt (או pyproject.toml), ומאפשרת לשותפים לשחזר את הסביבה שלכם. ההגדרה של דקה אחת חוסכת שעות של דיבאגינג של ModuleNotFoundError בהמשך.

מה ההבדל בין venv ל-virtualenv?

venv מובנה ב-Python 3, בלי צורך בהתקנה. virtualenv הוא כלי צד שלישי שקדם לו, עם כמה תכונות נוספות (יצירה מהירה יותר, תמיכה בגרסאות Python ישנות). ברוב הפרויקטים המודרניים venv היא ברירת המחדל הנכונה, ועברו ל-virtualenv רק אם יש לכם צורך מסוים.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל