ماژول ها اجازه می دهند تا بتوانم توابع و کلاس ها را درون فایل هایی سازماندهی کردن کنیم و سپس در فایل های دیگر از طریق نام فایل به توابع و کلاس های درون فایل دسترسی داشته باشیم. بنابراین یک فایل به نام mymodule.py یک ماژول است و نام ماژول mymodule است. (نام ماژول بدون پسوند py.است).

 همراه پایتون تعداد زیادی ماژول وجود دارد که برای انجام کاربردهای مختلف می توانند استفاده شوند. ولی توسعه دهندگان دیگر، خارج از توسعه پایتون، ماژول هایی را برای کاربردهای متفاوت توسعه داده اند که می بایست برای استفاده، آنها را نصب کنیم. همچنین به عنوان یک برنامه نویس می توانید ماژول خود را توسعه دهید.

دستور import

از دستور import برای ضمیمه کردن یک ماژول درون فایل دیگر استفاده می شود تا بتوانیم از توابع یا کلاس های تعریف شده درون ماژول استفاده کنیم. شکل کلی استفاده از دستور به صورت های زیر است. در حالت اول در جلوی دستور import نام ماژول قرار می گیرد. در حالت دوم در جلوی دستور import نام چندین ماژول جلوی دستور import قرار می گیرد که با علامت ویرگول از هم جدا شده اند و در حالت سوم در هر خط جلوی دستور import نام یک ماژول قرار می گیرد.

یک ماژول ساده

 یک فایل به نام hello.py داریم که در آن دو تابع به نام های hello و helloUser به صورت قطعه کد ۲ نوشته شده اند. تابع hello هیچ ورودی ندارد و فقط پیغام hello from hello.py file را نشان می دهد. ولی تابع دوم یک ورودی که نام کاربر است را دریافت می کند و پیغام Hello username را چاپ می کند. (به جای username نام کاربر قرار می گیرد).

__file__ نام یک متغیر پیش فرض درون پایتون است که نام و مسیر فایل کنونی (همین فایل اسکریپت پایتون) را نشان می دهد. فرض کنید در همان دایرکتوری که فایل hello.py وجود دارد یک فایل دیگر به نام test_hello.py وجود دارد که می خواهیم در آن از توابع تعریف شده در hello.py استفاده کنیم. مطابق قطعه کد ۳ از دستور import hello برای ضمیمه کردن ماژول hello در فایل test_hello.py استفاده کرده ایم.

برای استفاده از توابع یا کلاس های تعریف شده درون یک ماژول باید به صورت module_name.function_name و یا module_name.class_name استفاده شود. در قطعه کد ۳ ()hello.hello اولین hello نام ماژول و دومین hello نام تابعی است که درون فایل hello.py (درون ماژول hello) تعریف شده است.

دستور from … import

در هر فایل مربوط به ماژول ممکن است یک تا چندین تابع یا کلاس تعریف شده باشد. مطابق فرم کلی برای استفاده از این توابع یا کلاس ها باید به صورت module_name.function_name و module_name.class_name استفاده کنیم. از دستور import module_name برای ضمیمه کردن تمامی مواردی که درون یک ماژول قرار دارند استفاده می شود. ولی ممکن است بخواهیم فقط از یک چند مورد از مواردی که در یک ماژول وجود دارند  را ضمیمه کنیم باید از فرم کلی زیر استفاده کنیم. در حالت اول تنها یک مورد خاص از ماژول درون فایل ضمیمه می شود ولی در حالت دوم سه مورد از ماژول درون فایل ضمیمه می شوند.

در فرمت های بالا هر یک از name ها نام یک تابع یا کلاسی است که درون ماژول تعریف شده اند. مزیت دیگر استفاده از فرم from … import این است که می توانیم به صورت مستقیم و بدون استفاده از نام ماژول، به تابع یا کلاسی که ضمیمه کردیم دسترسی داشته باشیم. به عبارتی دیگر نیازی به استفاده از فرم module_name.function_name و module_name.class_name نیست. قطعه کد ۵ بازنویسی شده قطعه کد ۳ است.

اما مطابق قطعه کد ۶ چون تابع helloUser را ضمیمه نکرده ایم، استفاده از آن منجر به خطای زیر می شود.

دستور * from … import

اگر بخواهیم تمامی توابع یا کلاس های درون یک ماژول را ضمیمه کنیم و همچنین برای استفاده از موارد درون ماژول نیازی نداشته باشیم که نام ماژول را بیاوریم (منطور فرم های module_name.function_name و module_name.class_name)، باید از دستور زیر استفاده کنیم.

بنابراین اگر قطعه کد ۷ را جایگزین خط اول قطعه کد ۶ کنیم خطای نشان داده شده در قطعه کد ۶ رفع خواهد شد.

انتساب نام مستعار به نام ماژول

اگر نام ماژول طولای باشد می توانید از فرمت import module_name as alias_name استفاده کنید تا نام مستعاری را به نام ماژول انتساب دهید. این حالت فقط با دستور import ممکن است و برای استفاده از موارد تعریف شده درون ماژول به جای نام ماژول باید از نام مستعار آن به صورت های alias_name.function_name و alias_name.class_name استفاده کنید.

پیدا کردن محل قرار گیری ماژول ها

 مفسر پایتون برای ضمیمه کردن (Import کردن) یک ماژول مسیرهای مختلفی را جستجو می کند. به طور کلی پایتون به ترتیب در مسیرهای زیر به دنبال یک ماژول می گردد.

۱ – دایرکتوری جاری (Current Directory)

۲ – اگر ماژول پیدا نشود ، مفسر پایتون مسیرهای مشخص شده در متغیر محیطی PYTHONPATH را جستجو می کند. این متغیر ممکن است تنظیم نشده باشد.

۳ – در نهایت در مسیر پیشفرض نصب پایتون به دنبال ماژول می گردد. این مسیر در سیستم عامل های مختلف متفاوت است.

ماژول sys دارای یک متغیر به نام path است که لیستی از مسیرهایی را نگهداری می کند که پایتون در آنها برای مازول جستجو می کند. قطعه کد ۸ محتوای این متیغر را نشان می دهد.

از __file__ می توانیم برای پیدا کردن مسیر و نام فایل ماژول به صورت __module_name.__file استفاده کنیم. در قطعه کد ۹ سه ماژول sys و os و hello ضمیمه شده اند. در خطوط ۵ و ۶ بررسی شده است که آیا ماژول های hello و os در مسیر نصب پیشفرض پایتون قرار دارد. همانطور که گفته شد این مسیرها که در متغیر sys.path لیست شده اند. در خطوط ۸ و ۹ نیز مسیر ماژول های hello و os نشان داده می شوند.

خروجی برای خطوط ۵ و ۶ به ترتیب False و True خواهد بود، چونکه ماژول hello (فایل hello.py) درون مسیر های لیست sys.path قرار ندارد بلکه در زیر دایرکتوری جاری (Current Dirctory) قرار دارد.

لیست موارد تعریف شده در یک ماژول

تابع ()dir برای لیست کردن تمامی مواردی که درون یک ماژول تعریف شده اند نیز استفاده می شود. یکی دیگر از کاربردهای این تابع پیدا کردن متغیرها و متدهای مرتبط با یک شی (نمونه ای از یک کلاس) است.