قبل از این که بریم سراغ قسمتهای دیگه کار با پکیجهای پایتون باید یک کار خیلی مهم و یک قسمت مهم رو یاد بگیریم:
یک سوالی که قبل از ادامه کار به ذهن ما میرسه اینه که پایتون چطوری پکیجهای مختلف و ماژولهای رو پیدا میکنه؟
وقتی که شما میخواید یک پکیج یا ماژول رو import کنید پایتون روی سیستم شما دنبال سورسش میگرده و اون کد رو لود میکنه، اما سوالی که پیش میاد اینه که چطوری پایتون این کارو میکنه؟ و میدونه که کجارو دنبال بگرده؟
جواب سوال اینه که پایتون path attribute ماژول استاندارد سیستم یا همون standard sys module رو چک میکنه که بهش sys.path هم میگن
در عمل sys.path یک لیست از دایرکتوریها هستش که وقتی ما میخوایم یک پکیج یا ماژول رو import کنیم اول داخل دایرکتوری اول رو نگاه میکنه و اگر نبود یک مرحله میره داخلتر و sub directory رو چک میکنه تا جایی که دیگه sub directory ای برای چک کردن نباشه و اون زمان ImportError رو به ما میده که یعنی نتونسته چیزی که ما میخوایم رو پیدا کنه
همچنین یک نکته جالب دیگه هم در مورد این سرچ کردن هست و اونم اینه که اولین match شدن رو به عنوان نتیجه به ما برمیگردونه
به عنوان مثال من پایتون ۳.۱۰ و لیست دایرکتوریهاش رو در تصویر زیر نمایش دادم
ولی اگه پایتون ۳ که توی لینوکس به پایتونی که توسط پکیجها استفاده میشه این دستور رو بزنیم آیا متفاوت خواهد بود؟
خب توجه کنیم که sys.path یک لیسته مثل بقیه لیستها پس میتونیم از روش slicing و index بندی داخلش استفاده کنیم
یعنی که میتونیم مقدار sys.path[0] که برابر '' هستش رو نمایش بدیم یا کارهای این شکلی باهاش انجام بدیم
البته سوالی که شاید پیش بیاد برای شما اینه که چرا sys.path[0] برابر با ' ' یا همون خالی هستش؟
جوابش اینه که چون پایتون رو با آرگومان خاصی اجرا نکردیم و دستور python3 یا python3.10 رو خالی بدون هیچ پسوندی اجرا کردیم داره اعلام میکنه که پسوندی نداره
همچنین نکته جالب دیگهای که در مورد sys.path وجود داره اینه که sys.path[-5:] مقادیر استاندارد و پکیجهای استاندارد رو نمایش میده
تا این مرحله همه چیز تئوری بوده اما فرض کنید که میخوایم یک کار عملی انجام بدیم
فرض کنید که میخوایم یک پکیج یا یک دایرکتوری رو به sys.path اضافه کنیم
یک پروژه ایجاد میکنیم و داخلش یک directory ایجاد میکنیم و یک فایل پایتونی با اسم دلخواه خودمون میسازیم داخلش
من برای مثال یک پروژه با اسم Python-Organize ایجاد کردم که یک فولدر یا دایرکتوری با نام addsyspath میسازم که داخلش یک اسکریپت پایتونی با نام sysadd.py ایجاد کردم به صورت عکس زیر
حالا میخوایم اونو به sys.path اضافه کنیم
چرا این ارور رو میده؟ چون که داخل sys.path نیست هنوز
به محلی که پروژه رو ایجاد کردیم cd میکنیم و اون رو به sys.path اضافه میکنیم
قبلا گفتیم که sys.path یک لیست هستش در واقع پس برای اضافه کردن یک آیتم به اون هم مثل هر لیست دیگهای عمل میکنیم
sys.path.append("addsyspath")
خب حالا این دایرکتوری اضافه شد و میتونیم ماژول مورد نظرمون یعنی sysadd رو اضافه کنیم
و با دستور زیر اونو import میکنیم
from addsyspath import sysadd
اگه کارهارو درست انجام داده باشیم باید با پیام Added To Syspath که قبلا تعریف کردیم رو به رو میشیم
خب شاید این روش چندان خوب نباشه و بخوایم پروژهای که ایجاد کردیم رو بدون نوشتن و اجرا کردن این دستورات داشته باشیم
اینجا جایی هست که PYTHONPATH به کار ما میاد، هنگامی که پایتون رو اجرا میکنیم به صورت استاندارد چیزهایی که در PYTHONPATH هستند به sys.path اضافه میشه
برای اضافه کردن یک path یا directory به ورژن ویندوزی پایتون لازمه که دستور زیر رو اجرا کنیم
set PYTHONPATH=path1;path2;path3
برای اضافه کردن توی لینوکس یا مک هم به صورت زیر انجام میشه
export PYTHONPATH=path1:path2:path3
اگر بخوایم این تغییرات رو سیو کنیم و هربار این دستورات رو اجرا نکنیم در ویندوز باید از environmental path استفاده کنیم
توی لینوکس و مک هم میتونیم اونو به .bashrc یا .zshrc اضافه کنیم یا محلهای دیگری مثل محل زیر اضافش کنیم:
nano /etc/bash.bashrc
امیدوارم این قسمت آموزش براتون مفید بوده باشه
قسمت قبلی رو در این لینک ببینید:
https://virgool.io/@pooyadowlat/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D8%B3%D8%A7%D8%B2%D9%85%D8%A7%D9%86-%DB%8C%D8%A7%D9%81%D8%AA%D9%87-%D8%AA%D8%B1-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-vedyhpyvlxhn