پکیج و ماژول چیست؟
تعریف پکیج و ماژول به صورت زیر میباشد:
ماژول (module): ماژول یک برنامه پایتونی py. میباشد، که در برنامه دیگری صدا زده میشود.
پکیج (package): مجموعهایی از ماژولها را پکیج مینامند.
همان طور که یک فولدر شامل زیرفولدر و فایلهای متعددی میباشد، پکیج نیز شامل زیر پکیج و ماژولهای متعددی است.
ایجاد ماژول و پکیج های شخصیسازی شده
در این بخش به صورت یک مثال نحوه ایجاد پکیج و ماژول و استفاده از آن را بیان خواهیم کرد. در شکل زیر ترتیب ایجاد فایلها و فولدرها مشخص شده است.
هر فولدر پکیج حتما باید دارای یک فایل به نام __init__ باشد تا پایتون متوجه شود که با یک پکیج روبرو است. این فایل میتواند یک فایل خالی باشد. با این حال گاهی ممکن است تنظیمات اولیه آن پکیج نیز داخل این فایل قرار گیرد.
ابتدا در داخل فولدر اصلی که به نام python project5 میباشد، فایل پایتون به نام myprogram.py که برنامه اصلی و اجرایی میباشد را ایجاد میکنیم. به این صورت که بر روی دایرکتوری اصلی کلیک راست کرده وارد قسمت New شده و گزینه Python File را انتخاب میکنیم. سپس یک فایل پایتونی با نام myprogram.py ایجاد میکنیم.
همچنین در داخل فولدر اصلی که به نام python project5 میباشد. فایل پایتون به نام mymodule.py که دارای یک سری تابع است، ایجاد میکنیم. در واقع قرار است در myprogram.py آن توابع را صدا بزنیم. این فایل پایتونی یک ماژول میباشد.
سپس در داخل فولدر اصلی python project5، یک فولدر به نام main_package ایجاد میکنیم. که این فولدر یک پکیج است. به این صورت که بر روی دایرکتوری اصلی کلیک راست کرده وارد قسمت New شده و گزینه Directory را انتخاب میکنیم. سپس یک فولدر با نام main_package ایجاد میکنیم.
درون فولدر main_package که یک پکیج میباشد، یک فایل پایتون با نام __init__ و یک فایل پایتونی به نام mainmodule.py که به عنوان یک ماژول است، ایجاد کردهایم.
همچنین در فولدر main_package که پکیج اصلی میباشد. یک فولدر دیگر به نام sub_package که زیر پکیج میباشد، ایجاد میکنیم.
در داخل فولدر sub_package که یک زیر پکیج میباشد، فایل پایتونی __init__.py و فایل پایتونی submodule.py (ماژول) را میسازیم.
حال که تمام پکیجها و ماژولها را بر اساس یک سلسله مراتب ساختهایم. ابتدا داخل فایل پایتونی mymodule (ماژول) میشویم و فانکشن module_fun را میسازیم.
سپس داخل فایل پایتونی mianmodule (ماژول) که داخل فولدر main_package (پکیج) میباشد، فانکشن main_func را میسازیم.
همچنین داخل فایل پایتونی submodule (ماژول) که داخل فولدر sub_package (پکیج) میباشد، فانکشن sub_func را میسازیم.
نحوه استفاده از توابع ماژول ها و پکیج ها
برای استفاده از توابع موجود در پکیج و ماژول های ایجاد شده، داخل فایل پایتونی myprogram شده. فانکشن prog_func میسازیم.
برای فراخوانی توابع ایجاد شده در ماژول و پکیجهای ایجاد شده، میتوان تابع را با دستور from و import فراخوانی کرد. به عنوان مثال اگر بخواهیم در فایل myprogram تابع module_fun که در فایل mymodule (ماژول) میباشد را فراخوانی کنیم، میتوان دستور from mymodule import module_func را نوشت و سپس تابع را فراخوانی کرد.
اگر بخواهیم تابعی را که در داخل فایل mainmodule (ماژول) میباشد را در داخل فایل myprogram فراخوانی کنیم، به دلیل آن که فایل mainmodule درون فولدر main_package (پکیج) میباشد، ایتدا دستور from main_package import mainmodule را نوشته و سپس ()mainmodule.main_fun را مینویسیم. در این صورت تابع ()main_func فراخوانی میشود.
اگر بخواهیم فانکشن موجود در فایل پایتونی submodule (ماژول) را فراخوانی کنیم. به دلیل اینکه این فایل درون فولدر sub_package (زیرپکیج) میباشد و این فولدر هم درون فولدر main_package (پکیج) میباشد، ابتدا دستور from main_package.sub_package import submodule را نوشته، سپس ()submodule.sub_func را مینویسیم. در این صورت فانکشن ()sub_func فراخوانی میشود.
main & name در پکیج و ماژول
if__name__==”__main__” به این این معنی میباشد که، هر چه در این if قرار میگیرد، زمانی اجرا میشود که خود ماژول به صورت مستقیم اجرا شود و اگر در برنامه دیگری صدا زده شود، اجرا نمیشود. گاهی اوقات لازم است که کدهایی فقط و فقط در داخل خود ماژول اجرا شود. به این معنی که اگر در برنامه دیگری صدا زده شد، کدهای مد نظر اجرا نگردد. به عنوان مثال دو فایل پایتونی one.py و two.py داریم که میتوانیم از این دستور شرطی در آنها استفاده کنیم. ابتدا در داخل فایل one یک فانکشن نوشته، سپس یک دستور print اجرا میشود و در نهایت این دستور شرطی را مینویسیم. اگر فایل one را run بگیریم میبینیم شرط if اجرا میشود، زیرا در همین فایل one، کد run شده است.
اما اگر در فایل پایتونی two فایل one را run کنیم. میبینیم که شرط else اجرا میشود. همچنین تابع func اجرا نشد تا زمانی که شرط else اجرا شد سپس این تابع فراخوانی شد.
برای آشنایی بیشتر با مباحث ماژول ها و پکیج ها و نحوه کار با آنها میتوانید به دوره جامع آموزش زبان برنامهنویسی پایتون آکادمی رسا مراجعه کنید