مدیریت بسته پایتون (python package management) با poetry

از ابزار Poetry برای مدیریت وابستگی (dependency) و بسته بندی (packaging) در پایتون استقاده میشه؛ کافیه بسته هایی رو که پروژه مون بهش وابسته ست رو تعیین کنیم تا برامون مدیریتشون (نصب/بروز رسانی) کنه و در نهایت با استفاده از محیط مجازی (virtual environment) پروژه (اسکریپت) مورد نظر رو اجرا کنه.پروژه نمونه ای که قراره پیاده کنیم رو میتونین از مخزن اصلی گیت هاب ایرانی پای بردارید.مشاهده پروژه نمونه poetry_demo (شامل تنظیمات poetry و اسکریپت نمونه برای تست)مشاهده پروژه (شامل همه کدهای نوشته شده و فایلهای راهنما)الزامات سیستمدر حال حاضر ابزار Poetry به پایتون 2.7 یا 3.5 به بالا نیاز داره و برای پلتفرم های پر استقاده (Windows، Linux و OSX) قابل استفاده ست.نصب Poetryنصب روی osx و linux (یا با استفاده از bash تو windows)curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -نصب روی windows با استفاده از powershell(Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python -اسکریپت get-poetry.py که در دستورات بالا استفاده شده، تو نسخه 1.2 با install-poetry.py جایگزین میشه. از Poetry 1.1.7 به بعد، می تونید از این اسکریپت همینطور که توضیح داده شد استفاده کنید.در نهایت با استفاده از دستور زیر میتونیم بررسی کنیم که Poetry درست نصب شده یا نه (ممکنه نصب شده باشه ولی مسیرش (path) به متغییر های محیطی (environment variables) اضافه نشده باشه).poetry --versionبه جز موارد گفته شده، امکان نصب Poetry از طریق سایر مدیر بسته ها مثل pip هم امکان پذیره (ولی پیشنهاد نمیشه). برای مطالعه بیشتر در مورد شیوه های مختلف نصب و مراحلشون میتونید از مرجع اصلی استفاده کنید.استفاده اولیهبرای معرفی کاربردهای اولیه، کتابخانه pendulum رو نصب می کنیم.راه اندازی پروژه (ساخت پروژه جدید)اول پروژه جدید با اسم poetry_demo میسازیم:poetry new poetry_demoبا این کار پوشه poetry_demo با محتوای زیر ساخته میشه:poetry_demo ├── pyproject.toml ├── README.rst ├── poetry_demo │ └── __init__.py └── tests ├── __init__.py └── test_poetry_demo.pyچون فعلا قصد تست نوشتن برای پروژه مون نداریم، میتونیم مسیر tests/ و محتویاتشو حذف کنیم. به فایل README.rst هم نیازی نداریم و حذفش میکنیم که در این صورت ساختار پروژه به صورت زیر میشه:poetry_demo ├── pyproject.toml └── poetry_demo └── __init__.pyفایلی که بیشتر از بقیه برامون اهمیت داره، pyproject.toml هستش. ابزار Poetry با استفاده از این فایل پروژه و بسته هاش رو مدیریت می کنه. محتویات این فایل به صورت زیر هستش:[tool.poetry] name = &quotpoetry_demo&quot version = &quot0.1.0&quot description = &quot&quot authors = [&quotiranipy <info@iranipy.ir>&quot] [tool.poetry.dependencies] python = &quot*&quot [tool.poetry.dev-dependencies] pytest = &quot^3.4&quot [build-system] requires = [&quotpoetry-core>=1.0.0&quot] build-backend = &quotpoetry.core.masonry.api&quotراه اندازی پروژه (در صورتی که پروژه از قبل موجود باشه)به جای ساخت پروژه جدید، از Poetry برای ایجاد فایل pyproject.toml مناسب پروژه مون به صورت تعاملی، میشه استفاده کرد. دستورش به این صورته: (دستور زیر باید تو دایرکتوری اصلی (root) پروژه اجرا بشه)poetry initتعیین وابستگی هااگر بخوایم وابستگی هایی رو به پروژه اضافه کنیم، دو راه وجود داره. اولین راه اینه که می تونیم تو قسمت tool.poetry.dependencies تو فایل pyproject.toml بنویسمشون:[tool.poetry.dependencies] python = &quot*&quot pendulum = &quot^1.4&quotفقط کافیه اسم و نسخه مورد نظر پکیج نوشته بشه. Poetry از این اطلاعات برای جستجوی مجموعه مناسب فایل ها در مخازن (repositories) که تو قسمت tool.poetry.repositories تعیین شده (به طور پیش فرض PyPI)، استفاده می کنه.نسخه ای که به pendulum نسبت دادیم شامل هر نسخه بزرگتر یا مساوی 1.4.0 میشه. برای مطالعه بیشتر در مورد الگویی که تو این مثال برای تعیین نسخه استفاده شده، میتونید از مرجع اصلی استفاده کنید. به این الگو version constraints گفته میشه.برای اعمال تغییرات و نصب وابستگی ها کافیه دستور زیر رو اجرا کنیم:poetry installراه دوم استفاده از دستور add به جای تغییر دستی فایل pyproject.toml هستش:poetry add pendulumبا این دستور، Poetry به طور خودکار نسخه مناسب رو پیدا می کنه و بسته و وابستگی های فرعیش رو تو محیط مجازی ساخته شده برای این پروژه نصب می کنه و به فایل pyproject.toml هم بسته رو اضافه میکنه (همون کارایی که دستی انجام دادیم رو خودش انجام میده).بعد از اجرای دستور poetry install یا poetry add برای اولین بار، فایلی به اسم poetry.lock ساخته میشه. تو این فایل تمام پکیج های مورد نیاز پروژه به همراه نسخه دقیقی که دانلود شده، نوشته میشه. کاربرد این فایل اینه که وابستگی های پروژه رو، رو پکیج های دانلود شده اصطلاحا قفل (lock) میکنه.فایل poetry.lock باعث می شه هر کسی که پروژه رو راه اندازی می کنه، از نسخه های مشابه وابستگی هایی که شما استفاده می کنید، استفاده کنه. پس اگر از کنترل نسخه ای (version control) مثل git استفاده میکنید، پیشنهاد میشه این فایل رو هم کامیت (commit) کنید.بعد از اعمال این تغییرات محتوای فایل pyproject.toml به صورت زیر میشه:[tool.poetry] name = &quotpoetry_demo&quot version = &quot0.1.0&quot description = &quot&quot authors = [&quotiranipy <info@iranipy.ir>&quot] [tool.poetry.dependencies] python = &quot^3.8&quot pendulum = &quot^2.1.2&quot [tool.poetry.dev-dependencies] pytest = &quot^3.4&quot [build-system] requires = [&quotpoetry-core>=1.0.0&quot] build-backend = &quotpoetry.core.masonry.api&quotچون فعلا قصد تست نوشتن برای پروژه مون نداریم، به ماژول pytest نیاز نداریم. دو روش برای حذف کردنش وجود داره:فایل pyproject.toml رو دستی تغییر بدیم و بعد از ذخیره تغییرات، دستور poetry install رو اجرا کنیم که در نهایت محتوای فایل pyproject.toml اینجوری میشه:[tool.poetry] name = &quotpoetry_demo&quot version = &quot0.1.0&quot description = &quot&quot authors = [&quotiranipy <info@iranipy.ir>&quot] [tool.poetry.dependencies] python = &quot^3.8&quot pendulum = &quot^2.1.2&quot [build-system] requires = [&quotpoetry-core>=1.0.0&quot] build-backend = &quotpoetry.core.masonry.api&quotروش دوم استفاده از دستور poetry remove هستش که علاوه بر حذف بسته مورد نظر از محیط مجازی ساخته شده برای این پروژه، خودش فایل pyproject.toml رو هم تغییر میده:poetry remove pytestایجاد اسکریپت اصلیاسکریپت مورد نظر رو با اسم main.py و تو پکیج poetry_demo/ با محتوای زیر می سازیم:import pendulum def main(): now = pendulum.now(&quotEurope/Paris&quot) now.in_timezone(&quotAmerica/Toronto&quot) now.to_iso8601_string() print(now) if __name__ == '__main__': main()محتوای این فایل اسکریپت ساده ای هستش که نمونه کدی از کتابخونه pendulum رو اجرا می کنه.بعد از ساخت اسکریپت main.py، ساختار پروژه اینجوری میشه:poetry_demo ├── pyproject.toml ├── poetry.lock └── poetry_demo ├── __init__.py └── main.pyاجرای پروژه (اسکریپت)برای اجرای اسکریپت main.py کافیه دستور زیر رو اجرا کنیم:poetry run python poetry_demo/main.pyدستور بالا اسکریپت main.py که تو پکیج poetry_demo/ هستش رو تو محیط مجازی ساخته شده برای این پروژه اجرا می کنه.قبل استفاده از دستور poetry run برای اطمینان از اینکه تغییرات فایل pyproject.toml اعمال شده، دستور poetry install رو اجرا کنید.محیط مجازی (virtual environment)ساده ترین راه برای فعال کردن محیط مجازی ساخت shell جدید با استفاده از دستور زیر هستش:poetry shellبرای غیرفعال کردن محیط مجازی و خروج از این shell جدید دستور زیر رو اجرا می کنیم:exitبرای غیرفعال کردن محیط مجازی بدون خروج از shell دستور زیر رو اجرا می کنیم:deactivateبه این نکته هم توجه کنید که وقتی از دستور poetry run استفاده می کنیم، Poetry اسکریپت (پروژه) رو تو محیط مجازی ساخته شده برای اون پروژه اجرا می کنه. در نتیجه در اکثر اوقات به فعال کردن محیط مجازی به صورت دستی نیازی نیست.تو این پست دیدیم که چجوری با استفاده از ابزار Poetry پروژه مون رو مدیریت کنیم. کلی کارمون رو راحت می کنه، مثل استفاده از محیط مجازی (virtual environment) که در حالت عادی برای خیلیامون راحت نیست.امیدواریم از این پست استفاده کافی رو برده باشید. اگه شما هم مثل ما از خوندن مطالب پایتونی لذت میبرید، خوشحال میشیم ما رو تو شبکه های اجتماعی دنبال و در صورت داشتن انتقاد و پیشنهاد ما رو ازش مطلع کنید. لایک هم یادتون نره :)حمایت از مابا دنبال کردن ما درgithubtelegraminstagramtwitterیا کمک مالی به مبلغ دلخواه از طریق درگاه آیدی پی میتونید از ما حمایت کنید.وب سایت (به زودی): iranipy.ir