بسته های پایتون (Package) — به زبان ساده
در این مطلب، روش دانهبندی کدهای «زبان برنامهنویسی پایتون» (Python Programming Language) در «ماژولهای» (Modules) تمیز و کارآمد، با استفاده از بسته های پایتون (Package) آموزش داده شده است. همچنین، «روش وارد کردن» (ایمپورت | Import) و استفاده از بستههای شخص ثالث در برنامههای پایتون آموزش داده شده است. به طور کلی، در این راهنما، «بسته های پایتون (Package)» مورد بررسی قرار گرفتهاند. شایان ذکر است که پیش از این، در مطلب «ماژولهای پایتون (Python Modules) — به زبان ساده»، مفهوم ماژول، روش وارد کردن ماژولها در پایتون، و دیگر مفاهیم مرتبط با ماژولها، مورد بررسی قرار گرفت.
بسته های پایتون (Python Packages)
کاربران معمولا همه فایلهای خود را در کامپیوتر در یک محل ذخیره نمیکنند؛ بلکه از یک سلسله مراتب برای ذخیرهسازی آنها بهره میبرند تا دسترسی به فایلها برایشان سادهتر باشد. در واقع، فایلهای مشابه در «پوشه» (Directory) مشابهی قرار میگیرند.
برای مثال، همه آهنگها در پوشه «Music» نگهداری میشوند. به طور مشابه، پایتون دارای بستههایی (Packages) برای دایرکتوریها و ماژولهایی برای فایلها است. هر چه برنامه نوشته شده توسط کاربر بزرگ و بزرگتر شود و تعداد ماژولهای آن افزایش پیدا کند، ماژولهای مشابه در یک بسته و ماژولهای متفاوت در بستههای متفاوتی قرار میگیرند.
این امر، مدیریت یک پروژه (برنامه) را آسانتر و به لحاظ مفهومی شفافتر میکند. به طور مشابه، همانطور که یک پوشه میتواند دارای زیرپوشهها (Sub-Directories) و فایلهایی باشد، بسته های پایتون نیز میتواند زیربستهها و ماژولها را دربربگیرند. یک پوشه باید حاوی یک فایل با نام init__.py__ برای پایتون باشد تا آن را به عنوان یک بسته در نظر بگیرد. این فایل میتواند خالی رها شود، اما به طور کلی کد مقداردهی اولیه برای بسته در این فایل قرار میگیرد. در ادامه، مثالی برای آنچه بیان شد ارائه شده است. فرض میشود که کاربر در حال توسعه دادن یک بازی است. یک راه ممکن برای سازماندهی بستهها و ماژولها در تصویر زیر نمایش داده شده است.
وارد کردن ماژول از یک بسته
میتوان ماژولهای یک «بسته» (پکیج | Package) را با استفاده از عملگر «.» وارد کرد.
برای مثال، اگر قصد وارد کردن ماژول start در مثال بالا وجود داشته باشد، این کار به صورت زیر انجام میشود.
1import Game.Level.start
اکنون، اگر ماژول حاوی یک تابع با نام ()select_difficulty باشد، باید از نام کامل برای ارجاع دادن به آن استفاده شود.
1Game.Level.start.select_difficulty(2)
اگر این ساختار خیلی طولانی به نظر میرسد، میتوان ماژول را بدون پسوند بسته و به صورت زیر وارد کرد.
1from Game.Level import start
اکنون، به سادگی میتوان تابع را به صورت زیر فراخوانی کرد.
1start.select_difficulty(2)
همچنین، راه دیگری برای اینکه فقط تابع مورد نیاز (کلاس یا متغیر) از یک ماژول درون بسته وارد شود وجود دارد؛ این راهکار، به صورت زیر است.
1from Game.Level.start import select_difficulty
اکنون، میتوان به صورت مستقیم این تابع را فراخوانی کرد.
1select_difficulty(2)
با وجود سادهتر بودن روش مذکور نسبت به سایر روشها، استفاده از این روش توصیه نمیشود. استفاده از «فضای نام» (Namespace) کامل، مانع از سردرگمی میشود و از تصادم نام دو شناساگر با نام یکسان پیشگیری میکند.
هنگام وارد کردن بسته، پایتون درون لیست پوشههای تعریف شده در sys.path را میگردد؛ این همان کاری است که برای جستوجوی مسیر ماژولها انجام میدهد.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی پایتون
- آموزش تکمیلی برنامهنویسی پایتون
- مجموعه آموزشهای دادهکاوی و یادگیری ماشین
- زبان برنامهنویسی پایتون (Python) — از صفر تا صد
- یادگیری علم داده (Data Science) با پایتون — از صفر تا صد
- آموزش پایتون (Python) — مجموعه مقالات جامع وبلاگ فرادرس
^^
خیلی خوب و روان توضیح داده بودید.
البته می تونست کامل تر باشه.
ممنون