گاهی برای نوشتن یک برنامه کوچک یا حتی بزرگ نیاز به نصب کتابخانههای(libraries) متعدد زبان پایتون را داریم. در حالت عادی باید همه این پکیجها را بر روی پایتون کل سیستم (global) نصب کنیم این کار مشکلاتی برای ما ایجاد میکند. اول این که ممکن است نصب پکیج های متعدد بر روی کل سیستم تداخل بین نرم افزارهای نوشته شده ایجاد کند. دوم این که برای جابجا کردن این نرم افزار نمی دانیم که چه پکیج هایی نیاز است و برای نصب بر روی سیستم دیگر به مشکل بر میخوریم.
برای حل این مشکل، پایتون پیشنهاداتی برای ما دارد. یکی از این پیشنهادات virtualenv است که به راحتی فضای توسعه ایزوله از کل سیستم ایجاد میکند. این ویژگی کار را برای توسعه و راه اندازی راحت تر میکند.
نصب Virtualenv
برای استفاده از virtualenv نیاز داریم که به صورت سیستمی نصبش کنیم.
pip install virtualenv
پس از نصب دستور زیر را وارد کرده و به جای [folder] نام دلخواه پروژه خود را وارد میکنیم.
virtualenv [folder]
برای اینکه از این به بعد نصب پکیجها و اجرای پایتون فقط در فضای ایزوله ای ایجاد شده اتفاق بیوفتد باید فعال سازیش کنیم. پس از فعال سازی فضای ایزوله نام فولدری که فضای ایزوله روی آن ایجاد شده است داخل پرانتز قبل از علامت شل نوشته می شود.
cd [folder]
source bin/activate
cd [Folder]
Script\activate
از این به بعد اجرای دستورات python و pip در فضای ایزوله اجرا میشوند برای مثال میخواهیم پکیج Numpy نصب کنیم. این پکیج برای استفاده در آمار به درد می خوره. به راحتی پس از فعال کردن virtualenv طبق معمول دستور pip را اجرا میکنیم و نصب میکنیم. به دلیل این که virtualenv فعال است بر روی فضای ایزوله اجرا میشود.
pip install numpy
نصب گیت
به علت این که virtualenv فایل های مخصوص به خود را میسازد مجبوریم که در هنگام استفاده از گیت، فایل های virtualenv در gitignore بگذاریم که پکیج ها هم باهاش نصب نشه.
__pycache__/
[Bb]in
[Ii]nclude
[Ll]ib
[Ll]ib64
[Ll]ocal
[Ss]cripts
[Ll]ogs
pyvenv.cfg
.venv
pip-selfcheck.json
*.session
.env
در صورتی که بخواهیم در سیستم عامل دیگری این پروژه را نصب کنیم چون نمی دانیم چه پکیج های نصب شده است بنابراین در هر بار نصب پکیج جدید دستور زیر را هم اجرا میکنیم که اطلاعات پکیج نصب شده هم درگیت ثبت شود.
pip freeze >> requirements.txt
پس از اجرای دستور بالا فایلی درست میشود به اسم requirement.txt که همه لیست همه پکیج های نصب شده در فضای ایزوله در آن ذخیره شده است. این فایل را به مانند فایل های دیگر پروژه در گیت پوش میکنیم که در هنگام نصب بر روی سیستم دیگر استفاده نماییم.
راه اندازی پروژه در سیستم جدید
پس از این که فایل ها را از سرور گیت دریافت کردیم به مانند پروژه جدیدی که میخواهیم استارت بزنیم از دستور virtualenv استفاده میکنیم. ولی با این تفاوت که اسم همون فایلی که کل پروژه درون اون فایل است را وارد میکنیم.
virtualenv [exist-project]
سپس از روی فایل requirement.txt که در قسمت قبل راجع بهش صحبت کردیم استفاده می کنیم. که وابستگی های(dependencies) پروژه را هم نصب کنیم.
pip install -r requirements.txt
چگونه کار میکند؟
virtualenv در اصل متغیر PATH شل را تغییر میدهد. و آدرس لوکال پایتون فضای ایزوله را در ابتدای این متغییر اضافه میکند که از این به بعد دستورات python و pip از فایل bin پروژه ای که ایجاد کرده ایم خوانده میشود.
وظیفه متغیر PATH در شل این است که فایل های اجرایی مورد نیاز شل را به شل معرفی میکند و هر دستوری که در شل وارد میشود در یکی از این آدرس ها فایل اجرایی اش موجود است.
وقت بخیر.