با کمک این راهنما، نحوه ایجاد، توزیع و استفاده از بسته ها در پایتون را بیاموزید.
کار دلهره آور توسعه یک برنامه جامع محدود به یک فایل پایتون را تصور کنید. اگرچه از نظر فنی امکان پذیر است، اما برخلاف اصول اصلی ساختن نرم افزار کارآمد، قابل نگهداری و قابل استفاده مجدد است. به این دلایل، بسته ها و ماژول ها برای ساخت و توسعه نرم افزار ضروری هستند.
پکیج چیست؟
در پایتون، یک بسته راهی برای سازماندهی ماژول ها و منابع منطقی مرتبط با هم فراهم می کند. این دایرکتوری حاوی چندین ماژول پایتون، بستههای فرعی و منابع دیگر است.
بسته ها یک ساختار سلسله مراتبی ارائه می دهند که به شما امکان می دهد کد پروژه خود را در سطوح مختلف انتزاع سازماندهی کنید.
تفاوت بین بسته ها و ماژول ها
در حالی که می توانید از بسته ها و ماژول ها برای سازماندهی کد استفاده کنید، تفاوت هایی بین آنها وجود دارد:
- ماژول: ماژول فایلی است که کد پایتون را در خود جای داده است. توابع، کلاسها، متغیرها و سایر اشیاء را تعریف میکند که میتوانید آنها را وارد کنید و در کد خود استفاده کنید.
- پکیج: پکیج مجموعه ای از یک یا چند ماژول است و می تواند شامل بسته های فرعی نیز باشد.
نحوه ایجاد پکیج در پایتون
برای ایجاد یک پکیج مراحل زیر را دنبال کنید.
مرحله 1: یک فهرست پروژه ایجاد کنید
با ایجاد دایرکتوری پروژه شروع کنید.
study_bud/
مرحله 2: یک فهرست بسته ایجاد کنید
در داخل دایرکتوری پروژه خود، دایرکتوری دیگری ایجاد کنید که به عنوان دایرکتوری بسته عمل می کند. یک نام معنادار به آن بدهید که نشان دهنده هدف یا عملکرد بسته باشد. دایرکتوری بسته شامل ماژول ها و بسته های فرعی مربوط به بسته شما خواهد بود.
study_bud/
math_tool/
مرحله 3: فایل بسته __init__.py را تعریف کنید
در پوشه بسته، یک فایل __init__.py ایجاد کنید. وجود فایل __init__.py چیزی است که دایرکتوری را به یک بسته در پایتون تبدیل می کند.
اگر هر زمان که از بسته استفاده می کنید نیاز به مقداردهی اولیه دارید، آن را در فایل __init__.py قرار دهید در غیر این صورت همیشه خالی است.
study_bud/
math_tool/
__init__.py
مرحله 4: ماژول ها را به بسته اضافه کنید
در پوشه بسته، ماژولهای پایتون (.py) را اضافه کنید که توابع، کلاسها یا متغیرها را تعریف میکنند.
این ماژول ها حاوی کد واقعی هستند که عملکرد بسته شما را فراهم می کند. می توانید چندین ماژول را در پوشه بسته ایجاد کنید.
study_bud/
math_tool/
__init__.py
operations.py
statistics.py
مرحله 5: بسته های فرعی را به بسته اضافه کنید
اگر بسته شما نیاز به ساختار سلسله مراتبی دارد یا دارای عملکردهای متمایز است، می توانید بسته های فرعی را در فهرست بسته ایجاد کنید.
یک بسته فرعی به سادگی دایرکتوری بسته دیگری در دایرکتوری بسته اصلی است. هر بسته فرعی باید فایل __init__.py خود را داشته باشد. بسته های فرعی امکان سازماندهی و جداسازی بیشتر کد را فراهم می کنند.
study_bud/
math_tool/
__init__.py
operations.py
statistics.py
geometry/
__init__.py
shapes.py
calculus/
__init__.py
integrations.py
در این مراحل، شما یک بسته math_tool ایجاد کرده اید، دو ماژول (operations.py و statistics.py) و دو بسته فرعی هندسه و حساب دیفرانسیل و انتگرال هر کدام دارای ماژول های خود هستند.
با دنبال کردن این مراحل می توانید به راحتی عملکردهای مرتبط را با استفاده از یک بسته و بسته های فرعی سازماندهی کنید و مدیریت و استفاده مجدد کد را آسان تر کنید.
نحوه کار با پکیج در پایتون
برای کار با یک بسته باید آن را وارد کنید. کلمات کلیدی import و from به شما امکان وارد کردن و استفاده از یک بسته را در کد خود می دهد.
import math_tool # entire package
همچنین می توانید از نماد نقطه برای وارد کردن ماژول ها، بسته های فرعی یا ویژگی های خاص از یک بسته استفاده کنید. نماد نقطه به شما امکان می دهد در ساختار دایرکتوری بسته حرکت کنید. علامت نقطه باعث می شود واردات شما خواناتر و راحت تر نگهداری شود.
from math_tool.operations import add, multiply # specific functions
در کد بالا، شما از دایرکتوری بسته (math_tool) به ماژول عملیات با استفاده از علامت نقطه حرکت کرده و دو تابع (جمع و ضرب) را وارد کرده اید.
واردات مطلق در مقابل واردات نسبی
با واردات مطلق، مسیر کامل از بسته سطح بالا (بسته ریشه) به ماژول یا بسته فرعی مورد نظر را مشخص می کنید. این رایج ترین و توصیه شده ترین روش برای وارد کردن ماژول ها و بسته ها در پایتون است.
from math_tool.geometry.shapes import parallelogram
با شروع از math_tool به زیر بسته هندسه بروید، ماژول shapes.py را پیدا کنید و تابع متوازی الاضلاع را وارد کنید.
در حالی که واردات نسبی به شما امکان می دهد تا با استفاده از نماد نقطه برای تعیین واردات نسبی، واردات نسبت به مکان ماژول فعلی انجام دهید.
به عنوان مثال، در داخل ماژول calculus/integrations.py، می توانید از import نسبی برای وارد کردن یک تابع از ماژول shapes.py در بسته فرعی هندسه استفاده کنید.
# calculus/integrations.py
from ..geometry.shapes import rhombus
نقطه دوتایی (.”) به پایتون می گوید:
- از دایرکتوری بسته فرعی (حساب) جایی که ماژول (integrations.py) وجود دارد شروع کنید.
- به دایرکتوری بسته والد (math_tool) بسته فرعی بروید.
- بسته فرعی هندسه را در فهرست اصلی پیدا کنید.
- به ماژول shapes.py بروید و لوزی را از آن وارد کنید.
بنابراین علامت نقطه نشان دهنده تعداد دایرکتوری هایی است که باید از دایرکتوری ماژول فعلی به آنها پیمایش کنید.
واردات مستعار برای راحتی
شما می توانید یک نام مستعار به یک import اختصاص دهید تا ارجاع به آن در کدتان آسان تر شود. نام مستعار زمانی که با نام های طولانی بسته یا ماژول سروکار دارید مفید هستند.
برای اختصاص نام مستعار از کلمه کلیدی as استفاده کنید.
import math_tool.calculus as cal
نحوه توزیع بسته خود در پایتون
پایتون ابزارها و بستری برای ساخت و توزیع بسته خود در اختیار شما قرار می دهد. توزیع بسته خود به شما این امکان را می دهد که کد خود را با سایر توسعه دهندگان به اشتراک بگذارید، همکاری را ترویج دهید، نصب را برای کاربران ساده کنید و به جامعه گسترده تر پایتون کمک کنید.
مرحله 1: یک حساب کاربری در PyPI ایجاد کنید
فهرست بسته پایتون (PyPI) مخزن پیشفرض بستههای پایتون است. شما می توانید بسته های خود را در PyPI منتشر کنید تا سایر توسعه دهندگان بتوانند به راحتی آنها را پیدا و نصب کنند.
مطمئن شوید که نام کاربری و رمز عبور خود را به خاطر بسپارید زیرا هنگام آپلود بسته خود در PyPI به آنها برای احراز هویت نیاز دارید.
مرحله 2: ابزار مدیریت بسته را نصب کنید
این ابزارها پیکربندی، ساخت و فشار دادن یک بسته قابل توزیع را در یک دستور برای شما آسان می کنند.
pip install build wheel twine
مرحله 3: یک فایل setup.py ایجاد کنید
برای توزیع بسته خود، یک فایل setup.py در فهرست اصلی پروژه خود ایجاد کنید. فایل setup.py حاوی ابردادههایی درباره بسته شما است، مانند نام، نسخه، نویسنده، توضیحات، وابستگیها و موارد دیگر.
ابزارهای مدیریت بسته از فایل setup.py برای پیکربندی و ساخت بسته شما استفاده خواهند کرد.
#setup.py
from setuptools import setup, find_packages
setup(
name='<package name>',
version='1.0.0',
author='<Your Name>',
description='A collection of mathematical utility functions',
packages=find_packages(),
install_requires=[
'numpy',
'scipy',
],
)
مرحله 4: بسته را بسازید
هنگامی که فایل setup.py را آماده کردید، می توانید از آن برای ساخت یک بسته قابل توزیع استفاده کنید. در ترمینال یا خط فرمان خود، به دایرکتوری حاوی فایل setup.py بروید و دستور زیر را اجرا کنید:
python setup.py sdist bdist_wheel
این دستور یک دایرکتوری dist حاوی یک بسته توزیع منبع (tar.gz) و یک بسته توزیع چرخ (whl.) ایجاد می کند. همچنین یک فهرست ساخت و اطلاعات را خواهید دید.
مرحله 5: بسته را در PyPI آپلود کنید
با آماده بودن بسته خود، می توانید آن را در PyPI آپلود کنید.
دستور زیر را اجرا کنید:
twine upload dist/*
> Uploading distributions to https://upload.pypi.org/legacy/
> Enter your username: **********
> Enter your password: **********
برای مشاهده بسته خود از صفحه مدیریت پروژه PyPI خود دیدن کنید.
اکنون سایر توسعه دهندگان که بسته شما را مفید می دانند می توانند آن را به صورت محلی نصب و استفاده کنند.
نحوه نصب بسته پایتون
مدیران بستهها مانند pip نصب و مدیریت بستههای پایتون را از منابع مختلف، از جمله فهرست بسته پایتون (PyPI) آسان میکنند. برای نصب یک بسته با استفاده از pip، ترمینال یا خط فرمان خود را باز کنید و از دستور زیر استفاده کنید:
pip install <package_name>
برای مشاهده تمام دستورات و گزینه های موجود برای pip از گزینه –help استفاده کنید.
نوشتن ماژول های تمیز
بسته ها شامل ماژول ها و بسته های فرعی هستند که به نوبه خود حاوی ماژول های دیگری هستند. این تمرین خوبی است که کد خود را ماژولار کنید، به خصوص زمانی که روی پروژه های بزرگتر کار می کنید، زیرا سازماندهی کد و خوانایی بهتر را ارتقا می دهد. بنابراین مهم است که هنگام توسعه با پایتون، ماژول ها را با وضوح بنویسید.