בפוסט הקודם כתבתי הסבר על פואטרי ואיך הוא עובד ולמה לבחור בו על פני pipenv או על פני האפשרות המוקדמת יותר של pip + venv. בפוסט הזה אני אפרט קצת על קונפיגורציות מתקדמות בפואטרי שיכולות לשנות את ההתנהגות של פואטרי כמעט לגמרי – לקבוע היכן תמוקם תיקית ה-cache, לקבוע איפה תהיה תיקית ה-venv, לבחור אם להתקין את pip ב-bin ועוד שפע של שינויים. המאמר יוצא מנקודת הנחה שאתם מכירים כבר את פואטרי – אם לא, הפוסט הקודם יעשה לכם סדר (ואם בכלל אתם חדשים בעולם הסביבה של הפייתון אז הקודמים לו ויש קישורים מהפוסט על פואטרי).
אז בואו ונתחיל עם הקונפיגורציות. יש לפואטרי שתי קונפיגורציות. אחת לוקלית הנוגעת לפרויקט ואחת גלובלית. הקונפיגורציה הלוקלית מנצחת את הגלובלית.
על מנת להדגים, אני אשתמש בקונפיגורציה virtualenvs.in-project – מדובר בקונפיגורציה היוצרת את ה-venv בפרויקט עצמו ולא בתיקיה כלשהי המשותפת לכל הפרויקטים. אני באופן אישי מעדיף שזה יהיה כך. אם הקונפיגורציה הזו קיימת, poetry install יתקין את הסביבה הוירטואלית – כלומר המודולים וה-bin של פייתון, בתיקית הפרויקט. אם היא לא, הקונפיגורציה תותקן ב ״/Library/Caches/pypoetry/virtualenv/~״ במק או בתיקית המשתמש בחלונות. פחות מתאים לי.
כדי לבחון את קובץ הקונפיגורציה הגלובלית, אני יכול להקליד בכל מיקום שהוא את הפקודה:
poetry config --list
ואקבל רשימה של ההגדרות.
הרשימה הזו מגיעה מקובץ ולא נמצאת סתם בזכרון. הקובץ נמצא במק בתיקיה הזו:
~/Library/Preferences/pypoetry/config.toml
ובחלונות בתיקיה הזו:
%APPDATA%\pypoetry\config.toml
ובלינוקס בתיקיה הזו:
$XDG_CONFIG_HOME/pypoetry
או בזו:
~/.config/pypoetry
אפשר לראות שזה דומה ל-pyproject.toml אבל מכיל רשימה של הגדרות.
שינוי הגדרות גלובלי
על מנת לשנות את ההגדרות באופן גלובלי, אני צריך לציין את סוג ההגדרה ואת הערך שלה. למשל virtualenvs.in-project עם ערך true תוצג כך:
poetry config virtualenvs.in-project true
מהנקודה הזו, כל פעם שאני אתקין חבילה או פרויקט, ה-venv שלו יווצר בתיקיה של הפרויקט.
שינוי הגדרות לוקלי
אני יכול (לא חובה) ליצור גם הגדרות לוקליות, כלומר מקומיות, שיעבדו אך ורק בפרויקט שלי. אני צריך להוסיף את הפלאג local– לפקודות שלי. למשל הפקודה הזו, אם אקליד אותה בפרויקט שפואטרי מנהלת, ישנה את virtualenvs.in-project ל-false בפרויקט הספציפי שבו אני נמצא. כלומר בפרויקט הזה והזה בלבד, ה-venv יותקן בתיקיה אחרת. אבל בפרויקטים אחרים הוא יותקן בתיקית הפרויקט.
poetry config virtualenvs.in-project false --local
אם אני אריץ את הפקודה הזו, אני אראה שנוצר בפרויקט שלי קובץ בשם poetry.toml שאני יכול להכניס לריפוזיטורי. הקובץ מכיל את כל ההגדרות שהגדרתי כ local–. אני יכול לצפות בכל ההגדרות גם כ:
poetry config --list --local
שימו לב: הפקודה תציג גם את הערכים הגלובליים אם לא דרסתי אותם.
מציאת ההגדרות
אחרי שהבנו איך קובעים את ההגדרות לוקלית וגלובלית, השאלה הנשאלת היא איך אני יודע מה השם שלהן? במקרה הזה הדוקומנטציה עוזרת ויש כמובן פירוט מלא של כל ההגדרות.
שימוש במשתני סביבה בהגדרות
לפעמים אנו רוצים להשתמש במשתני סביבה כהגדרות. אין שום בעיה לעשות את זה. על מנת לעשות את זה אנו צריכים לבחור בתחילית POETRY ואז להחליף את הנקודות או המקפים (-) ב״_״ ולהמיר את הכל לאותיות גדולות.
למשל, אם אני רוצה להגדיר את virtualenvs.in-project שיקבל את ערכו ממשתנה סביבה, אני:
- אכניס את התחילית _POETRY כך: POETRY_virtualenvs.in-project
- אמיר את הנקודות והמקפים ל ״_״ כך: virtualenvs_in_project
- אהפוך את הכל לאותיות גדולות: POETRY_VIRTUALENVS_IN_PROJECT
משתנה הסביבה הזה יקבע את virtualenvs.in-project ויהיה ראשון לפני ההגדרות השונות
export POETRY_VIRTUALENVS_IN_PROJECT=false
הנה דוגמאות נוספות להגדרות.
export POETRY_CACHE_DIR=/path/to/cache/dir
export POETRY_VIRTUALENVS_PATH=/path/to/virtualenv/dir
זה שימושי בסביבות CI שונות – שם לעתים אני צריך ורוצה לעשות אופטימיזציות של (למשל) לא להתקין את pip (אין מה לעשות איתו בסביבת פרודקשן) או להגדיל את מספר ה-retries אם האינטרנט לא משהו.