⚡pipzap: zapping ظروف سرباز یا مسافر از وابستگی های پایتون

مدیریت بسته پایتون همیشه یک نعمت و نفرین برای جامعه بوده است. ابزارهایی مانند PIP که در ابتدا نصب کتابخانه ها را بدون دردسر انجام می دادند ، اما مدیریت محیط های جدا شده به زودی محدودیت های آنها را نشان داد. در حالی که محیط های مجازی تسکین دهنده ای را فراهم می کنند ، پیچیدگی حفظ تنظیمات تمیز و قابل تکرار همچنان در حال رشد است – اما این موضوعی برای زمان دیگری است.
مشکل بزرگ
اول ، وجود داشت pip
بشر همراه با requirements.txt
، به نظر می رسید یک ایده عالی است – روشی ساده برای اعلام صریح وابستگی. خوشبختانه ، ما به سرعت فهمیدیم که این روش تمایل به مارپیچ به هرج و مرج دارد ، به ویژه هنگامی که توسعه دهندگان از “ترفندهایی” استفاده می کنند pip freeze
برای قفل کردن وابستگی ها به سختی. خوشبختانه ، اکوسیستم پایتون تکامل یافته و راه حل های مدرن مانند شعر و اکنون UV را ارائه می دهد ، و مدیریت وابستگی ساختاری ، کنترل بهتر نسخه و پیروی از استانداردهایی مانند PEP 621 را ارائه می دهد.
با این حال ، با وجود این پیشرفت ها ، پروژه های بی شماری ، حتی پروژه های فعال ، همچنان به کثیف اعتماد دارند requirements.txt
پرونده ها این می تواند در تمام پروژه های بی شماری مرتبط با ML مشاهده شود ، جایی که نه تنها به زیبایی شناسی آسیب می رساند بلکه یک مشکل واقعی است و اتخاذ بسیاری از پروژه های عالی به یک درد عالی است. بدیهی است ، این مشکل منحصر به ML نیست – تقریباً در تمام حوزه های پایتون تأثیر می گذارد و سردردهای نگهداری را در سراسر صفحه ایجاد می کند.
چرا مهم است؟
یک کثیف requirements.txt
– مخصوصاً از pip freeze
– شما را در تنظیمات نفخ و سفت و سخت قفل می کند. به روز رسانی و تکه؟ سخت همکاری؟ کابوس کاربران با درگیری ، رفع نسخه های مشکل و سردردهای نصب روبرو هستند. ابزارهای مدرن مانند pyproject.toml
این کار را بهتر انجام دهید ، اما عادت های قدیمی ما را به پایین می کشاند.
⚡pipzap را وارد کنید
Pipzap دقیقاً به این مشکلات می پردازد. آن را تجزیه و تحلیل و آلوهای زائد ، وابستگی های گذرا ، تحول دست و پا گیر requirements.txt
پرونده ها به اظهارات وابستگی مینیمالیستی سازگار با شعر یا اشعه ماوراء بنفش pyproject.toml
بشر این فقط به پرونده های مورد نیاز به عنوان ورودی محدود نمی شود – همچنین می تواند pyprojects های موجود را فیلتر کند.
در حالی که دلسرد می شوید ، هنوز هم می توانید آن را حفظ کنید
requirements.txt
به عنوان یک خروجی به عنوان یک ماده کامل.
پروژه Easy_Vitpose را به عنوان یک نمونه واضح در نظر بگیرید. این یک بسته بندی عالی از یک مدل تشخیص SOTA است ، اما به نیازهای آن نگاه کنید. txt – این یک آشفتگی با آن است 50 وابستگی های پین شده:
# A/N: not truncated to paint the picture
certifi==2023.7.22
charset-normalizer==3.2.0
coloredlogs==15.0.1
contourpy==1.1.1
cycler==0.11.0
ffmpeg==1.4
filelock==3.12.4
filterpy==1.4.5
flatbuffers==23.5.26
fonttools==4.43.0
humanfriendly==10.0
idna==3.4
imageio==2.31.3
importlib-resources==6.1.0
jinja2>=3.1.3
kiwisolver==1.4.5
lazy_loader==0.3
MarkupSafe==2.1.3
matplotlib==3.8.0
mpmath==1.3.0
networkx==3.1
numpy==1.26.0
onnx==1.14.1
onnxruntime==1.16.0
opencv-python==4.8.0.76
packaging==23.1
pandas==2.1.1
Pillow>=10.2.0
protobuf==4.24.3
psutil==5.9.5
py-cpuinfo==9.0.0
pycocotools==2.0.8
pyparsing==3.1.1
python-dateutil==2.8.2
pytz==2023.3.post1
PyWavelets==1.4.1
PyYAML==6.0.1
requests==2.31.0
scikit-image==0.21.0
scipy==1.11.2
seaborn==0.12.2
six==1.16.0
sympy==1.12
tifffile==2023.9.18
tqdm==4.66.1
typing_extensions==4.8.0
tzdata==2023.3
ultralytics==8.2.48
urllib3>=2.0.7
zipp==3.17.0
دلیل انتخاب این پروژه به عنوان نمونه ، کمی احساساتی است – این نکته من بود که وقتی مجبور شدم این را در پروژه خود ادغام کنم ، شروع به توسعه Pipzap کردم و دریافتم که موارد فوق
requirements.txt
حتی درsetup.py
بشر
حال ، بیایید Pipzap را روی آن بمالیم (pipzap requirements.txt -f uv
) ، و در اینجا زیبایی است که ما در نتیجه به دست می آوریم:
[project]
name = "easy_ViTPose"
version = "1.1"
requires-python = "~=3.11"
dependencies = [
'ffmpeg==1.4',
'filterpy==1.4.5',
'importlib-resources==6.1.0',
'onnx==1.14.1',
'onnxruntime==1.16.0',
'pycocotools==2.0.8',
'scikit-image==0.21.0',
'ultralytics==8.2.48',
'zipp==3.17.0',
]
یک لیست وابستگی های خوب ، تمیز و قابل کنترل. البته ، چند کار هنوز هم می تواند به صورت دستی برای دستیابی به کمال انجام شود ، اما در این مرحله ، برخلاف قبل ، ممکن و امکان پذیر است.
چگونه Pipzap کار می کند
Pipzap برای همکاری با سه قالب وابستگی متداول از هم اکنون طراحی شده است: الزامات برهنه ، شعر و اشعه ماوراء بنفش. برای دستیابی به این هدف ، UV به عنوان یک بازنمایی متوسط و جهانی انتخاب شد. خوشبختانه ، این ابزارهای لازم برای انتقال خودکار قالب های دیگر در آن است.
پس از به دست آوردن نمایندگی اشعه ماوراء بنفش ، Pipzap اعلامیه کامل و قفل را تجزیه می کند ، نمودار وابستگی را برطرف می کند ، وابستگی های گذرا غیر ضروری را مشخص می کند و آنها را هرس می کند. سرانجام ، این وابستگی های باقی مانده را در قالب خروجی درخواست شده دوباره شکل می دهد و لیست وابستگی جدید و مختصر را به کاربر می دهد.
این که آیا اصلاح یک پروژه میراث ، مدیریت وابستگی های تیم شما یا ترکیب کتابخانه های خارجی ، Pipzap می تواند به شما در ساده سازی روند کمک کند.
مقایسه PIPZAP با ابزارهای موجود
چندین ابزار در حال حاضر به چالش های مختلفی در مدیریت وابستگی پایتون می پردازند ، در درجه اول با تمرکز بر تولید و حفظ requirements.txt
پرونده ها:
-
pipreqs: به طور خودکار حداقل تولید می کند
requirements.txt
با اسکن واردات پروژه ، هدف قرار دادن وابستگی مستقیم. این مفید است اما می تواند وابستگی ها را در سناریوهای پیچیده یا واردات پویا از دست بدهد. -
PIP-TOOLS: ابزارهایی مانند ارائه می دهد
pip-compile
برای پین کردن همه وابستگی ها ، از جمله موارد گذر ، قابل تکرارrequirements.txt
بشر این امر به طور قابل توجهی مدیریت وابستگی سنتی را افزایش می دهد اما با الگوی قدیمی تر گره خورده است.
چه چیزی Pipzap را از هم جدا می کند
Pipzap خود را با یک رویکرد تازه متمایز می کند ، به طور خاص نقاط درد مشترک را که توسط سایر ابزارها از دست رفته است هدف قرار می دهد:
- هرس: PIPZAP اعلامیه های وابستگی شما را تجزیه و تحلیل می کند ، شناسایی و از بین بردن وابستگی های گذرا غیر ضروری. این منجر به اعلامیه های قابل توجهی تمیزتر و قابل حفظ تر می شود.
-
مهاجرت صاف: این فقط الزامات موجود را مدیریت نمی کند. Pipzap به طور فعال پروژه های انتقال را به دور تسهیل می کند
requirements.txt
به سمت استانداردهای مدرن مانندpyproject.toml
، تراز کردن با بهترین شیوه ها و استانداردهای مانند PEP 621. - آینده گرا: به جای بهینه سازی سیستم قدیمی ، PIPZAP از پذیرش کامل شیوه های مدیریت وابستگی مدرن ، اطمینان از حفظ پروژه ها در طولانی مدت ، حفظ و مقیاس پذیر است.
افکار نهایی
با استفاده از PIPZAP ، توسعه دهندگان پایتون در نهایت می توانند هرج و مرج وابستگی را از بین ببرند. وابستگی های پروژه خود را لاغر نگه دارید ، تعمیر و نگهداری را ساده کنید و قابلیت استفاده را برای هر کسی که با کد شما تعامل دارد بهبود بخشد. بگذارید Pipzap جنگل وابستگی خود را مرتب کند و اجازه دهید کیفیت پروژه شما به وضوح صحبت کند.
امتیاز
یکی از موارد استفاده ناخواسته اما ظهور ممکن است در حال انتقال یک پروژه از نمونه سازی سریع به یک مجموعه قابل کنترل تر و بالغ تر بدون نگرانی از سازمان مناسب از ابتدا باشد. به سادگی پروژه را همانطور که می روید توسعه دهید و وقتی زمان فرا رسید ، تولید کنید pip freeze > requirements.txt
، سپس بلافاصله آن را با:
pipzap requirements.txt -f uv
لینک
- ⚡ پستانک – وابستگی های پایتون خود را با زحمت ساده کنید.
- 📦 شعر – ابزار مدیریت وابستگی مدرن و بسته بندی برای پایتون.
- 🌟 ماوراء بنفش – مدیر بسته سریع ، حتی مدرن تر.
- 📜 PEP 621 – استاندارد رسمی پایتون برای ذخیره ابرداده پروژه در
pyproject.toml
بشر