committed by
GitHub
1 changed files with 298 additions and 0 deletions
@ -0,0 +1,298 @@ |
|||
# متغیرهای محیطی |
|||
|
|||
/// tip |
|||
|
|||
اگه از قبل میدونی متغیرهای محیطی چی هستن و چطور ازشون استفاده میشه، میتونی این بخش رو رد کنی. |
|||
|
|||
/// |
|||
|
|||
یه متغیر محیطی (که بهش "**env var**" هم میگن) یه متغیریه که **خارج** از کد پایتون، توی **سیستمعامل** زندگی میکنه و میتونه توسط کد پایتونت (یا برنامههای دیگه) خونده بشه. |
|||
|
|||
متغیرهای محیطی میتونن برای مدیریت **تنظیمات** برنامه، بهعنوان بخشی از **نصب** پایتون و غیره مفید باشن. |
|||
|
|||
## ساخت و استفاده از متغیرهای محیطی |
|||
|
|||
میتونی متغیرهای محیطی رو توی **شل (ترمینال)** **بسازی** و ازشون استفاده کنی، بدون اینکه به پایتون نیاز داشته باشی: |
|||
|
|||
//// tab | لینوکس، مکاواس، ویندوز بش |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
// میتونی یه متغیر محیطی به اسم MY_NAME بسازی با |
|||
$ export MY_NAME="Wade Wilson" |
|||
|
|||
// بعد میتونی با برنامههای دیگه ازش استفاده کنی، مثل |
|||
$ echo "Hello $MY_NAME" |
|||
|
|||
Hello Wade Wilson |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
//// tab | ویندوز پاورشل |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
// یه متغیر محیطی به اسم MY_NAME بساز |
|||
$ $Env:MY_NAME = "Wade Wilson" |
|||
|
|||
// با برنامههای دیگه ازش استفاده کن، مثل |
|||
$ echo "Hello $Env:MY_NAME" |
|||
|
|||
Hello Wade Wilson |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
## خوندن متغیرهای محیطی توی پایتون |
|||
|
|||
میتونی متغیرهای محیطی رو **خارج** از پایتون، توی ترمینال (یا با هر روش دیگه) بسازی، و بعد توی **پایتون** اونا رو بخونی. |
|||
|
|||
مثلاً میتونی یه فایل `main.py` داشته باشی با: |
|||
|
|||
```Python hl_lines="3" |
|||
import os |
|||
|
|||
name = os.getenv("MY_NAME", "World") |
|||
print(f"Hello {name} from Python") |
|||
``` |
|||
|
|||
/// tip |
|||
|
|||
آرگومان دوم <a href="https://docs.python.org/3.8/library/os.html#os.getenv" class="external-link" target="_blank">`os.getenv()`</a> مقدار پیشفرضیه که برمیگردونه. |
|||
|
|||
اگه ندی، بهصورت پیشفرض `None` هست، اینجا ما `"World"` رو بهعنوان مقدار پیشفرض گذاشتیم. |
|||
|
|||
/// |
|||
|
|||
بعد میتونی اون برنامه پایتون رو صدا کنی: |
|||
|
|||
//// tab | لینوکس، مکاواس، ویندوز بش |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
// اینجا هنوز متغیر محیطی رو تنظیم نکردیم |
|||
$ python main.py |
|||
|
|||
// چون متغیر محیطی رو تنظیم نکردیم، مقدار پیشفرض رو میگیریم |
|||
|
|||
Hello World from Python |
|||
|
|||
// ولی اگه اول یه متغیر محیطی بسازیم |
|||
$ export MY_NAME="Wade Wilson" |
|||
|
|||
// و بعد دوباره برنامه رو صدا کنیم |
|||
$ python main.py |
|||
|
|||
// حالا میتونه متغیر محیطی رو بخونه |
|||
|
|||
Hello Wade Wilson from Python |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
//// tab | ویندوز پاورشل |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
// اینجا هنوز متغیر محیطی رو تنظیم نکردیم |
|||
$ python main.py |
|||
|
|||
// چون متغیر محیطی رو تنظیم نکردیم، مقدار پیشفرض رو میگیریم |
|||
|
|||
Hello World from Python |
|||
|
|||
// ولی اگه اول یه متغیر محیطی بسازیم |
|||
$ $Env:MY_NAME = "Wade Wilson" |
|||
|
|||
// و بعد دوباره برنامه رو صدا کنیم |
|||
$ python main.py |
|||
|
|||
// حالا میتونه متغیر محیطی رو بخونه |
|||
|
|||
Hello Wade Wilson from Python |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
چون متغیرهای محیطی میتونن خارج از کد تنظیم بشن، ولی کد میتونه اونا رو بخونه، و لازم نیست با بقیه فایلها ذخیره (کمیتی به `git`) بشن، معمولاً برای پیکربندی یا **تنظیمات** استفاده میشن. |
|||
|
|||
همچنین میتونی یه متغیر محیطی رو فقط برای **یه اجرای خاص برنامه** بسازی، که فقط برای اون برنامه و فقط برای مدت زمان اجراش در دسترسه. |
|||
|
|||
برای این کار، درست قبل از خود برنامه، توی همون خط بسازش: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
// یه متغیر محیطی MY_NAME رو توی خط برای این اجرای برنامه بساز |
|||
$ MY_NAME="Wade Wilson" python main.py |
|||
|
|||
// حالا میتونه متغیر محیطی رو بخونه |
|||
|
|||
Hello Wade Wilson from Python |
|||
|
|||
// متغیر محیطی بعدش دیگه وجود نداره |
|||
$ python main.py |
|||
|
|||
Hello World from Python |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
/// tip |
|||
|
|||
میتونی بیشتر در موردش توی <a href="https://12factor.net/config" class="external-link" target="_blank">برنامه دوازدهفاکتوری: پیکربندی</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) به این اطلاعات نیاز داری. |
Loading…
Reference in new issue