همه چی در مورد ابزار مدیریت پکیج Pipenv در پایتون

در این مقاله میخوام توضیحی در مورد ابزار مدیریت پکیج جدیدی به نام Pipenv رو به شما توضیح بدم.خوب توضیحی کوتاه در مورد Pipenv:یک ابزار برای مدیریت پکیج است که مشکلاتی که در استفاده از پکیج های pip, virtualenv و خروجی دستوریpip freeze > requirement.txt هست رو درست میکنه یا به حداثل میرسونه.اول از همه مشکلاتی که حل میکنهخوب برای اینکه بهتر با مراحل ساخت یک پروژه آشنا بشیم با یک مثال شروع میکنیم. این مثال یک پروژه فلسک ( Flask ) رو نشون میده.خوب اول از همه یک آدرسی برای شروع پروژه انتخاب میکنیم. سپس محیط مجازیمون رو آماده میکنیم سپس پکیج مورد نظر رو نصب میکنیم و بعد از پکیح های نصب شده یک خروجی فایل txt تهیه میکنی# project work directory mkdir -p /home/projects/flask_app # change directory to flask_app folder cd /home/projects/flask_app # ما اینجا دو تا حالت داریم میتونیم به اختیار از هرکدوم استفاده کنیم # setup virtualenv # راه اول استفاده از محیط مجازی پیش فرض پایتون python -m venv .venv # راه دوم نصب پکیج virtualenv و استفاده از آن pip install virtualenv virtualenv .venv # اکتیو کردن محیط مجازی windows: .\.venv\Scripts\activate mac/Gnulinux: source ./.venv/bin/activate # نکته بعد از فعال شدن محیط مجازی یک پیام (activate) # در ترمنیال خود میبینید # برای غیرفعال کردن از کامند &quot deactivate &quot استفاده کنید # نصب پیکیج flask pip install flask # گرفتن خروجی فایل txt pip freeze > requirement.txtخروجی مورد انتظار ما بعد باز کردن فایل requirement.txt:flask==2.0.2اگر شما پروژه تون رو میخواهید انتقال بدهید به سیستم دیگر نیاز به داشتن فولدر .venv نیستید فقط محتویات پروژه خود را انتقال دهید سپس در مکان جدید یک محیط مجازی ساخته آن را فعال کنید و پکیج های خود را نصب کنید از طریق فایل requirement با دستور pip install -r requirements.txtخوب تا الان آماده شد همه چی برای توضیح در مورد مدیرت پکیج قدیمی.پیکیج فلسک وقتی روی محیط مجازی نصب میشود شامل فقط پیکیج فلسک نیست چند پکیج مربوط بهش نصب میشود مثلا پیکیج Wekzeug.اینطور بگم وقتی شما نسخه ای از فلسک نصب میکنید pip میره ورژنی که در دسترسش هست رو برای ما نصب میکنه خارج از اینکه مشکل داره یا نه این میتونه وقتی ما پروژه مون رو بردیم روی هاست باعث خطا و اجرا نشدن کدهامون بشه.click==6.7 Flask==0.12.1 itsdangerous==0.24 Jinja2==2.10 MarkupSafe==1.0 Werkzeug==0.14.1خروجی نصب فلسک و تهیه یک نسخه از پکیج های نصبی.خوب از اینجا به بعد بریم با مدیریت پکیجمون کار کنیم.خب اول با نصب پیکیج شروع کنیم.pip install pipenvبعد نصب پیکیج وارد محیط مجازی با دستور زیر میشیم.pipenv shellاین دستور یک محیط مجازی میسازه اگر تا الان وجود نداشته باشه و بهش متصل میشهخب حالا میخوایم ایندفعه با این ابزار فلسک رو نصب کنیم.pipenv install flask==2.0.2 or pipenv install flaskاگر با ورژن باشه مشخص میکنید کدوم ورژن براتون نصب بشه.نصب پکیجی دیگرpipenv install numpyنصب پکیج محبوب request از طریق گیت:pipenv install -e git+https://github.com/requests/requests.git#egg=requestsو اگر شما برای پروژه تون میخواید یک تست بنویسید نیاز به پکیج pytest دارید که فقط توی حالت توسعه به کارتون میاد به صورت زیر نصب میکنیدpipenv install pytest --devبرای اینکه بتونیم پروژمون رو توی پروداکشن ببریم نیاز داریم پکیج های نصبیم رو تا اینجا لاک کنیم تا نیاز نباشه دستی بسازیم هیچ وقتم نباید دستی بسازید همیشه با این دستور تولیدش کنید.pipenv lockاین کار برای شما یک فایل Pipfile.lock میسازه.برای نصب پکیج ها در پروداکشن با دستور پروژه تون رو آماده میکنید.pipenv install --ignore-pipfileاینکار فایل Pipfile تون رو نادیده میگیره و از روی فایل Pipfile.lock پکیج هاتون رو نصب میکنه.برای توسعه توسط توسعه دهنده دیگری از کامند زیر استفاده میکنیم تا فایل Pipfile هم براش بیاد تا بتونه توسعه رو ادامه بدهpipenv install --devبا اینکار پیکیج ها کامل نصب میشوند چه پکیج های اصلی چه پکیج های فقط برای توسعه مثل pytest.خوب برای دیدن درخت پیکیج های میتونید از دستور زیر استفاده کنیدpipenv graph# output Flask==0.12.1 - click [required: >=2.0, installed: 6.7] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.10] - MarkupSafe [required: >=0.23, installed: 1.0] - Werkzeug [required: >=0.7, installed: 0.14.1] numpy==1.14.1 pytest==3.4.1 - attrs [required: >=17.2.0, installed: 17.4.0] - funcsigs [required: Any, installed: 1.0.2] - pluggy [required: <0.7,>=0.5, installed: 0.6.0] - py [required: >=1.5.0, installed: 1.5.2] - setuptools [required: Any, installed: 38.5.1] - six [required: >=1.10.0, installed: 1.11.0] requests==2.18.4 - certifi [required: >=2017.4.17, installed: 2018.1.18] - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4] - idna [required: >=2.5,<2.7, installed: 2.6] - urllib3 [required: <1.23,>=1.21.1, installed: 1.22]یه توضیحی در مورد Pipfile بدماین فایل دقیقا همون requirement.txt هستش فقط بهمون به بهبود مدیریت پکیج هامون کمک میکنه. نمونه ای از فایل رو زیر میزارم[[source]] url = &quothttps://pypi.python.org/simple&quot verify_ssl = true name = &quotpypi&quot [dev-packages] pytest = &quot*&quot [packages] flask = &quot==0.12.1&quot numpy = &quot*&quot requests = {git = &quothttps://github.com/requests/requests.git&quot, editable = true} [requires] python_version = &quot3.6&quotموفق باشید.