در این مقاله میخوام توضیحی در مورد ابزار مدیریت پکیج جدیدی به نام 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) # در ترمنیال خود میبینید # برای غیرفعال کردن از کامند " deactivate " استفاده کنید # نصب پیکیج 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 = "https://pypi.python.org/simple" verify_ssl = true name = "pypi" [dev-packages] pytest = "*" [packages] flask = "==0.12.1" numpy = "*" requests = {git = "https://github.com/requests/requests.git", editable = true} [requires] python_version = "3.6"
موفق باشید.