diff --git a/docs/fa/docs/environment-variables.md b/docs/fa/docs/environment-variables.md new file mode 100644 index 000000000..802f0b586 --- /dev/null +++ b/docs/fa/docs/environment-variables.md @@ -0,0 +1,300 @@ +# متغیرهای محیطی + +/// نکته + +اگر از قبل میدونید «متغیرهای محیطی» چی هستن و چطور کار میکنن، میتونید این بخش رو رد کنید. + +/// + +متغیر محیطی (که بهش «**env var**» هم میگن) یه متغیره که **خارج از کد پایتون** و توی **سیستمعامل** زندگی میکنه. کد پایتون شما (یا حتی برنامههای دیگه) میتونن این متغیرها رو بخونن و ازشون استفاده کنن. + +این متغیرها برای مدیریت **تنظیمات برنامه**، نصب پایتون یا چیزای دیگه خیلی بهدرد میخورن. + +## ساختن و استفاده از متغیرهای محیطی + +شما میتونید متغیرهای محیطی رو توی **شل (ترمینال)** بسازید و استفاده کنید، بدون اینکه نیازی به پایتون داشته باشید: + +//// tab | لینوکس، مکاواس، ویندوز Bash + +<div class="termy"> + +```console +// میتونید یه متغیر محیطی به اسم MY_NAME بسازید با +$ export MY_NAME="وید ویلسون" + +// بعدش میتونید ازش توی برنامههای دیگه استفاده کنید، مثل +$ echo "سلام $MY_NAME" + +سلام وید ویلسون +``` + +</div> + +//// + +//// tab | ویندوز PowerShell + +<div class="termy"> + +```console +// یه متغیر محیطی به اسم MY_NAME بسازید +$ $Env:MY_NAME = "وید ویلسون" + +// ازش توی برنامههای دیگه استفاده کنید، مثل +$ echo "سلام $Env:MY_NAME" + +سلام وید ویلسون +``` + +</div> + +//// + +## خوندن متغیرهای محیطی توی پایتون + +شما میتونید متغیرهای محیطی رو **خارج از پایتون**، مثلاً توی ترمینال (یا هر روش دیگه) بسازید و بعد توی پایتون بخونیدشون. + +مثلاً فرض کنید یه فایل `main.py` دارید با این کد: + +```Python hl_lines="3" +import os + +name = os.getenv("MY_NAME", "جهان") +print(f"سلام {name} از پایتون") +``` + +/// نکته + +آرگومان دوم تابع <a href="https://docs.python.org/3.8/library/os.html#os.getenv" class="external-link" target="_blank">`os.getenv()`</a> مقدار پیشفرضیه که برمیگرده. + +اگه چیزی ندید، به صورت پیشفرض `None` برمیگرده، ولی اینجا ما «جهان» رو بهعنوان مقدار پیشفرض گذاشتیم. + +/// + +حالا میتونید این برنامه پایتون رو اجرا کنید: + +//// tab | لینوکس، مکاواس، ویندوز Bash + +<div class="termy"> + +```console +// اینجا هنوز متغیر محیطی رو تنظیم نکردیم +$ python main.py + +// چون متغیر رو نذاشتیم، مقدار پیشفرض رو میگیره + +سلام جهان از پایتون + +// حالا اگه اول یه متغیر محیطی بسازیم +$ export MY_NAME="وید ویلسون" + +// و دوباره برنامه رو اجرا کنیم +$ python main.py + +// حالا متغیر محیطی رو میخونه + +سلام وید ویلسون از پایتون +``` + +</div> + +//// + +//// tab | ویندوز PowerShell + +<div class="termy"> + +```console +// اینجا هنوز متغیر محیطی رو تنظیم نکردیم +$ python main.py + +// چون متغیر رو نذاشتیم، مقدار پیشفرض رو میگیره + +سلام جهان از پایتون + +// حالا اگه اول یه متغیر محیطی بسازیم +$ $Env:MY_NAME = "وید ویلسون" + +// و دوباره برنامه رو اجرا کنیم +$ python main.py + +// حالا متغیر محیطی رو میخونه + +سلام وید ویلسون از پایتون +``` + +</div> + +//// + +از اونجایی که متغیرهای محیطی رو میشه بیرون از کد تنظیم کرد، ولی کد میتونه بخوندشون و نیازی نیست توی فایلها ذخیره بشن (مثلاً توی `git` commit بشن)، برای مدیریت تنظیمات یا **settings** خیلی استفاده میشن. + +یه راه دیگه هم هست که متغیر محیطی رو فقط برای **یه اجرای خاص برنامه** بسازید، یعنی فقط برای همون برنامه و همون لحظه در دسترس باشه. + +برای این کار، متغیر رو درست قبل از اجرای برنامه، توی همون خط تعریف کنید: + +<div class="termy"> + +```console +// متغیر MY_NAME رو توی همین خط برای این اجرا میسازیم +$ MY_NAME="وید ویلسون" python main.py + +// حالا متغیر محیطی رو میخونه + +سلام وید ویلسون از پایتون + +// بعدش دیگه متغیر وجود نداره +$ python main.py + +سلام جهان از پایتون +``` + +</div> + +/// نکته + +میتونید بیشتر در موردش توی <a href="https://12factor.net/config" class="external-link" target="_blank">The Twelve-Factor App: Config</a> بخونید. + +/// + +## انواع و اعتبارسنجی + +این متغیرهای محیطی فقط میتونن **رشتههای متنی** رو نگه دارن، چون خارج از پایتون هستن و باید با بقیه برنامهها و سیستم (حتی سیستمعاملهای مختلف مثل لینوکس، ویندوز، مکاواس) سازگار باشن. + +یعنی **هر مقداری** که توی پایتون از متغیر محیطی میخونید، یه `str` هست و اگه بخواید به نوع دیگهای تبدیلش کنید یا اعتبارسنجی کنید، باید توی کدتون انجامش بدید. + +توی [راهنمای پیشرفته - تنظیمات و متغیرهای محیطی](./advanced/settings.md){.internal-link target=_blank} بیشتر در مورد استفاده از متغیرهای محیطی برای **تنظیمات برنامه** یاد میگیرید. + +## متغیر محیطی `PATH` + +یه متغیر محیطی **خاص** به اسم **`PATH`** وجود داره که سیستمعاملها (لینوکس، مکاواس، ویندوز) ازش برای پیدا کردن برنامههایی که باید اجرا بشن استفاده میکنن. + +مقدار `PATH` یه رشته طولانیه که از دایرکتوریها تشکیل شده و توی لینوکس و مکاواس با دونقطه `:` و توی ویندوز با نقطهویرگول `;` از هم جدا شدن. + +مثلاً متغیر `PATH` میتونه این شکلی باشه: + +//// tab | لینوکس، مکاواس + +```plaintext +/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin +``` + +یعنی سیستم باید دنبال برنامهها توی این دایرکتوریها بگرده: + +* `/usr/local/bin` +* `/usr/bin` +* `/bin` +* `/usr/sbin` +* `/sbin` + +//// + +//// tab | ویندوز + +```plaintext +C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32 +``` + +یعنی سیستم باید دنبال برنامهها توی این دایرکتوریها بگرده: + +* `C:\Program Files\Python312\Scripts` +* `C:\Program Files\Python312` +* `C:\Windows\System32` + +//// + +وقتی توی ترمینال یه **دستور** مینویسید، سیستمعامل توی **هر کدوم از این دایرکتوریها** که توی متغیر `PATH` لیست شدن دنبال برنامه میگرده. + +مثلاً وقتی `python` رو توی ترمینال مینویسید، سیستمعامل دنبال برنامهای به اسم `python` توی **اولین دایرکتوری** اون لیست میگرده. + +اگه پیداش کنه، **اجرا میکنه**. اگه نه، توی **بقیه دایرکتوریها** دنبالش میگرده. + +### نصب پایتون و بهروزرسانی `PATH` + +وقتی پایتون رو نصب میکنید، ممکنه ازتون بپرسه که آیا میخواید متغیر `PATH` رو بهروز کنید. + +//// tab | لینوکس، مکاواس + +فرض کنید پایتون رو نصب کردید و توی دایرکتوری `/opt/custompython/bin` قرار گرفته. + +اگه بگید بله و بخواید `PATH` رو بهروز کنید، نصبکننده `/opt/custompython/bin` رو به متغیر `PATH` اضافه میکنه. + +ممکنه این شکلی بشه: + +```plaintext +/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin +``` + +اینجوری وقتی توی ترمینال `python` رو تایپ کنید، سیستم برنامه پایتون رو توی `/opt/custompython/bin` (آخرین دایرکتوری) پیدا میکنه و از اون استفاده میکنه. + +//// + +//// tab | ویندوز + +فرض کنید پایتون رو نصب کردید و توی دایرکتوری `C:\opt\custompython\bin` قرار گرفته. + +اگه بگید بله و بخواید `PATH` رو بهروز کنید، نصبکننده `C:\opt\custompython\bin` رو به متغیر `PATH` اضافه میکنه. + +ممکنه این شکلی بشه: + +```plaintext +C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin +``` + +اینجوری وقتی توی ترمینال `python` رو تایپ کنید، سیستم برنامه پایتون رو توی `C:\opt\custompython\bin` (آخرین دایرکتوری) پیدا میکنه و از اون استفاده میکنه. + +//// + +پس اگه تایپ کنید: + +<div class="termy"> + +```console +$ python +``` + +</div> + +//// tab | لینوکس، مکاواس + +سیستم برنامه `python` رو توی `/opt/custompython/bin` **پیدا میکنه** و اجراش میکنه. + +تقریباً مثل اینه که تایپ کنید: + +<div class="termy"> + +```console +$ /opt/custompython/bin/python +``` + +</div> + +//// + +//// tab | ویندوز + +سیستم برنامه `python` رو توی `C:\opt\custompython\bin\python` **پیدا میکنه** و اجراش میکنه. + +تقریباً مثل اینه که تایپ کنید: + +<div class="termy"> + +```console +$ C:\opt\custompython\bin\python +``` + +</div> + +//// + +این اطلاعات وقتی در مورد [محیطهای مجازی](virtual-environments.md){.internal-link target=_blank} یاد میگیرید به کارتون میاد. + +## نتیجهگیری + +با این توضیحات، باید یه درک اولیه از اینکه **متغیرهای محیطی** چی هستن و چطور توی پایتون ازشون استفاده میشه داشته باشید. + +میتونید توی <a href="https://en.wikipedia.org/wiki/Environment_variable" class="external-link" target="_blank">ویکیپدیا برای متغیر محیطی</a> بیشتر در موردشون بخونید. + +خیلی وقتها معلوم نیست متغیرهای محیطی چطور میتونن همین الان بهدرد بخورن. ولی وقتی دارید کد مینویسید، توی موقعیتهای مختلف سر و کلهشون پیدا میشه، پس خوبه که باهاشون آشنا باشید. + +مثلاً توی بخش بعدی که در مورد [محیطهای مجازی](virtual-environments.md) هست، به این اطلاعات نیاز پیدا میکنید.