PyPI یا Conda-Forge
تفاوت اصلی دیگری که بین pip و conda وجود دارد بیشتر به این بر میگردد که هر کدام بر چه مخزن پکیجی استوار است و اینکه آن مخزن چطور کار می کند. خصوصا آنکه بیشتر برنامههای پایتونی به کتابخانههای متن باز تکیه دارند و آن ها هم باید از جایی دانلود شوند. به این منظور pip به PyPI متکی است در حالی که conda از چندین «کانال» متفاوت پشتیبانی میکند که روی Anaconda نگهداری می شوند.
کانال پیشفرض conda توسط شرکت Anaconda، که conda را پدید آورد، نگهداری می شود. این کانال معمولاً پکیج های محدودی برای انتخاب دارد و تا حدی کمتر بروز است، البته نقات مثبتی هم به خاطر پایداری و پشتیبانی از GPU دارد. از همه اینها بگذریم من شناخت چندانی از آن ندارم.
اما از طرفی دیگر کانال جامعه محور Conda-Forge را داریم که کلی پکیج در آن گرد آمده که معمولاً بروز هستند، و این همان جایی است که شاید بخواهید پکیج های Conda را از آن دانلود کنید. شما میتوانید پکیج ها را از کانال پیشفرض و Conda-Forge با هم ترکیب کنید تا بتوانید از پکیج های GPU دار (!) هم استفاده کنید.
برویم که PyPI و Conda-Forge را مقایسه کنیم.
PyPI
پکیج هایی که روی PyPI هستند معمولاً توسط خود نویسنده پکیج آپلود شده اند. مثلاً من که نویسنده Fil memory profiler هستم، خودم هم پکیج PyPIش رو ساختم.
هر «صاحب پکیج» ی باید خودش پکیجش را به روش منحصر به فردی کامپایل کرده و یا بسازد، زیرساخت های build خودش را نگهداری کند، شرایط کامپایل خودش را انتخاب کند و الی آخر.
مثلا، NumPy میتواند بر چندین کتابخانه BLAS یا (Basic Linear Algebra Subprograms) تکیه کند تا عملیات های جبر خطی سریعی انجام دهد. نگهدارنده های نامپای انتخاب کردند که پکیج PyPI شان را با OpenBLAS بسازند؛ اگر شما گزینه ی دیگری بخواهید، مثل MKL یا Math kernel library اینتل، چارهای ندارید مگر اینکه خودتان کد را کامپایل کنید.
Conda-Forge
Conda-Forge یک پروژه اجتماعی (با مشارکت عموم) است که در آن نگهدارنده های پکیج ها میتوانند با نویسندههای آن یکی نباشند. مثلاً من به کدهای typeguard Conda-Forge دسترسی دارم در حالی که جزء نگهدارنده های کتابخانه typeguard نیستم.
در کنار اینکه می شود هر پکیجی توسط نگهدارنده های متفاوتی شخصی سازی گردد، Conda-Forge یک سیستم Build متمرکز دارد که کتابخانهها را مجدداً کامپایل می کند، دستور مخازن را بروز و به طور کلی همه عملیات های انبوه را به طور خودکار انجام می دهد. به عنوان مثال وقتی که یک نسخه جدید از پایتون ۳ منتشر شود، یک بروزرسانی مرکزی انجام شده و به یک یک «صاحب پکیج» ها اضافه شدن پکیج جدید اطلاع رسانی می شود. در PyPI این کار به عهده خود نگهدارنده است.
چون زیرساخت های ایجاد پکیج متمرکز هستند، Conda-Forge میتواند به شما امکان انتخاب از بین هرکدام از BLAS ها را بدهد؛ که این قابلیت میتواند برای NumPy و SciPy و هر پکیجی که به BLAS نیاز دارد و مدنظر شماست، استفاده شود.
کار با پکیج های PyPI در Conda
هرچند Conda-Forge کلی پکیج دارد، اما همه ی آنها را ندارد؛ بسیاری از پکیج های پایتون فقط روی PyPI پیدا می شوند. شما میتوانید راهکارهای متعددی برای حل کمبود این پکیج ها در conda در پیش گیرید.
نصب پکیج ها با pip در محیط Conda
در لفافه محیط های کاری Conda درواقع virtualenv قرار دارند؛ بنابراین شما میتوانید برای نصب صرفاً تایپ کنید pip install . اگر از یک فایل environment.yml برای نصب پکیج Conda استفاده می کنید، میتوانید همینجا پکیج های pip را هم اضافه کنید:
name: myenv
channels:
- conda-forge
dependencies:
- python=3.9
- numpy
- pandas
- gnuplot
- pip:
# Package that is only on PyPI
- sandu
خودتان برای Conda-Forge پکیج بسازید
از آن جایی که الزامی وجود ندارد تا نویسندگان کد خودشان در Conda-Forge پکیج بسازند، هر کسی میتواند برای افزودن پکیج به Conda-Forge داوطلب شود. حتی شما دوست عزیز!
این پروسه برای بسیاری از پکیج های پایتونی به طرز شگفت انگیزی ساده و تقریباً خودکار است، در نتیجه مدیریت کردن ریلیز های جدید اغلب به سادگی تأیید یک گزارش اطلاع رسانی خودکار است.
خلاصه: PyPI یا Conda-Forge
ابزارهای اضافی برای Pip و Conda
این هم از یک خلاصه سریع از برخی ابزارهایی که شاید مایل باشید استفاده کنید:
محض یادآوری: اگر از Conda استفاده می کنید، بسیار توصیه میکنم Mamba را جایگزین آن کنید. چرا که گزینه های خط فرمان مشابهی دارد و بسیار سریعتر است.
حالا کدام را انتخاب کنیم؟
بالاخره کدام را انتخاب کنیم، Pip یا Conda؟ برای محاسبات عمومی با پایتون، Pip و PyPI معمولاً کافی هستند و ابزارهایشان نیز رو به بهبود است.
برای علوم داده و محاسبات علمی، توانایی پکیج کردن کتابخانههای third-party توسط Conda و زیر ساخت متمرکز ارائه شده توسط Conda-Forge باعث شده تا تنظیم و ساخت پکیج های پیچیده سادهتر شود. در انتها اینکه کدامیک برای شما بهتر کار میکند به موقعیت و نیازمندی شما ربط دارد: احتمالاً هر دو به کارتان می آیند.
پی نوشت: در بخش اول این مقاله به مقایسه کلی pip با Conda پرداختم که از اینجا می توانید مطالعه کنید.
منبع: این مطلب ترجمه بخش دوم این مقاله است.