برای انجام هر کاری در زبان برنامه نویسی پایتون نیاز به کدنویسی داریم پکیج ها در زبان برنامه نویسی پایتون که در ادامه برایتان توضیح می دهیم کار کدنویسی را برایمان راحت تر کرده اند در ادامه در مورد اینکه پکیج در پایتون چیست و import در پایتون و ساخت پکیج ها در پایتون صحبت می کنیم،پکیج ها مزایای بسیاری از جمله در ساخت اپلیکیشن موبایل با پایتون دارند.
آنچه در این نوشته خواهیم داشت
پکیج های پایتون
پکیج ها مانند فایل می مانند که آنها را دسته بندی می کنیم آنها دارای ماژول هستند که ماژول آنهایی که مشابه اند را در یک پکیج قرار می دهیم برای اینکه ماژول ها را راحت تر پیدا کنیم پکیج را دسته بندی می کنیم.
هر فولدر پکیج یک فایل به نام init_.py_ دارد تا پایتون بتواند پکیج را تشخیص دهد فایل init_.py_می تواند خالی باشد یا بعضی از تنظیمات اولیه پکیج در این فایل قرار داده شود مثلا برای ساخت یک بازی به کمک پایتون خود بازی شامل زیر پکیج های level و image و sound می شود و یک init_.py دارد در داخل زیر پکیج ها هم چندین ماژول داریم و کدهایی که داخل این ماژول هاست را در برنامه استفاده می کنیم بنابراین از این طریق کدهای ما مرتب می شوند و مثلا اگر صدای بازی دچار ایراد شد می فهمیم مشکل از کجاست.
مطالعه مقاله(پایتون چیست؟ 13 دلیلی که چرا باید آن را بیاموزید) به شما توصیه می شود.
ساخت پکیج ها در پایتون
بعضی مواقع می خواهید ماژول هایتان را به یک پکیج تبدیل کنید ماژول های مشابه را در یک دایرکتوری قرار می دهیم و تمام دایرکتوری ها را به یک پکیج تبدیل می کنیم.
فرض کنید پکیجی به نام animal می خواهیم بسازیم که این پکیج دو فایل ماژول به نام های mammals و birds دارد که هر کدام از ماژول ها کلاس هایی به نام mammals و birds دارند ابتدا دایرکتوری به نام animals ایجاد می کنیم.
/mkdir animals /cd animals
سپس دو کلاس mammals و birds را در ماژول های mammals و birds ایجاد می کنیم ، ابتدا ماژول mammals.py را در دایرکتوری animals می سازیم و کد زیر را در آن می نویسیم.
class Mammals: def __init__(self): '''Constructor for this class. ''' # Create some member animals self.members = ['Tiger', 'Elephant', 'Wild Cat', 'Fox'] def printMembers(self): print('Printing members of the Mammals class') for member in self.members: print('t%s ' % member)
کلاس mammals لیستی به نام members دارد که نام چندین حیوان در آن نوشته شده است ، تابعی با نام print members در این کلاس داریم که با استفاده از print نام این حیوانات را چاپ می کند و نمایش می دهد.در اینجا فقط باید کلاس هایمان را import کنیم و به اجرایشان نیاز نداریم.
حالا ماژولی با نام birds.py در همان دایرکتوری animals می سازیم و این کد را برایش می نویسیم.
class Birds: def __init__(self): '''Constructor for this class. ''' #Create some member animals self.members = ['Sparrow', 'Robin', 'Duck', 'Penguin'] def printMembers(self): print('Printing members of the Birds class') for member in self.members: print('t%s ' % member)
در آخر نیز فایل init با پسوند py را در دایرکتوری animals ایجاد می کنیم.
from .mammals import Mammals from .birds import Birds
با نوشتن کد بالا کلاس هایمان از ماژول های مختلف را می توانیم import کنیم . برای اینکه عملکرد این پکیج را امتحان کنیم یک فایل جدید در خارج از دایرکتوری animals می سازیم و از کلاس های پکیج جدید خود در آن استفاده می کنیم.
#Import classes from your brand new package from animals import Mammals from animals import Birds # Create an object of Mammals class & call a method of it myMammal = Mammals() myMammal.printMembers() # Create an object of Birds class & call a method of it myBird = Birds() myBird.printMembers()
و لیست موجود در کلاس های birds و mammals را چاپ می کنیم.بعد از اجرای برنامه این خروجی را داریم:
Printing members of the Mammals class Tiger Elephant Wild Cat Fox Printing members of the Birds class Sparrow Robin Duck Penguin
اگر بخواهیم از این پکیج در کل سیستم استفاده کنیم باید بدانیم که پکیج پایتون در مسیر مشخصی نصب می شود به نام site-packages با اجرای دستور زیر آدرس دقیق این مسیر را پیدا می کنیم.
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" #Output on my system #/usr/lib/python3.6/site-packages/
ماژولی به نام setup.py را همان جایی که دایرکتوری animals را ایجاد کردیم می سازیم و کد زیر را داخلش می نویسیم.
from setuptools import setup setup( name = 'animals', version = '0.1', description= 'Animals Package', author = 'Moein Babapour', 'packages=['animals']
برای نصب پکیج خود روی سیستم یکی از دو دستور زیر را می نویسیم.
sudo python setup.py install # or sudo python setup.py develop
بنابراین می توانید از هر پکیجی که ساختید استفاده کنید در دستور اول به install کردن پکیج نیاز است و در این حالت ماژول هایمان را کپی کرده و آنها را در همان مسیر نصب می کند ولی با اجرای دستور دوم داخل فایلی که در site-packages ایجاد شده آدرس مسیری که پکیج ما در آنجا قرار دارد نوشته شده است.
برگشت های درونی پکیج
sound/ Top-level package init__.py Initialize the sound package__ formats/ Subpackage for file format conversions init__.py__ wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... effects/ Subpackage for sound effects init__.py__ echo.py surround.py reverse.py ... filters/ Subpackage for filters init__.py__ equalizer.py vocoder.py karaoke.py ...
را در نظر بگیرید بعضی مواقع ماژول ها در زیر پکیج ها احتیاج دارند که مراجعه کنند به یک ماژول در یک زیر پکیج دیگر.وقتی پکیج به صورت زیر پکیج ساخته می شود می توانید از واردات مستقل برای مراجعه زیر ماژول ها به زیر ماژول پکیج های هم خانواده استفاده کنید مثلا اگر sound.filters.vocoder نیاز به استفاده از ماژول echo در پکیج sound.effectsدارد می تواند از from sound.effects import echo استفاده کند در صورتیکه واردات وابسته relative imports را می توانید به صورت from module import name بنویسید import نقطه های راهنما پکیج های فعلی و والد درگیر واردات وابسته را بیان می کنند relative imports بر اساس نام ماژول فعلی انجام می شود ماژول های اصلی برنامه پایتون باید از واردات مستقل absolute relative استفاده کنند زیرا نام ماژول اصلی main می باشد.
پکیج ها در چندین دایرکتوری در پایتون
پکیج ها از ویژگی خاص دیگری به نام __path__ هم پشتیبانی می کنند .path ابتدا لیستی است که شامل نام دایرکتوری است. init__.py را داخل پکیج قبل از اجرای کد در آن فایل نگه می دارد . این متغیر Path قابل اصلاح است که انجام این کار بر آینده ماژول ها و زیر پکیج های موجود در پکیج تاثیر می گذارد با اینکه این ویژگی بیشتر موافع مورد نیاز نیست ولی برای گسترش ماژول های پکیج می توان از آن استفاده کرد.
نکته : در واقع تعاریف تابع نیز عباراتی هستند که اجرا می شوند. اجرای تعریف تابع سطح ماژول ، نام تابع را در جدول نماد جهانی ماژول وارد می کند.
جمع بندی
در اینجا در مورد پکیج ها مثال هایی ارائه کردیم امیدوارم با مفاهیم پایه ای پکیج ها در زبان برنامه نویسی پایتون و ویژگی و عملکرد پکیج ها در چندین دایرکتوری در پایتون و ساخت پکیج ها در پایتون آشنا شده باشید و بتوانید از ماژول ها و پکیج ها در کدنویسی پایتون استفاده کنید و با استفاده از آنها بتوانید برنامه را مدیریت کنید و توابع پر استفاده را بتوانید import کنید شما همچنین از این به بعد میتوانید به راحتی در هر جایی از سیستم خود از پکیجی که ساختید استفاده کنید و قابلیت های بسیاری به پکیج خود اضافه کنید.