1 changed files with 300 additions and 0 deletions
@ -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) هست، به این اطلاعات نیاز پیدا میکنید. |
Loading…
Reference in new issue