Как да управлявате проекти на Python с Pipenv

Пакетната екосистема на Python ви позволява да използвате работата на милиони други разработчици с проста pip installкоманда. Виртуалните среди на Python ви позволяват да изолирате проекти и техните пакети един за друг.

Но жонглирането на среди и пакети поотделно може да бъде тромаво. Двойно е така, ако вашите проекти имат специфични изисквания към пакета и искате да се съсредоточите върху разработката, а не върху поддръжката. Това, от което се нуждаем, е начин за съвместно управление на среди и пакети. 

Pipenv събира управлението на виртуалните среди на Python и пакетите на Python в един инструмент. Pipenv гарантира, че всеки проект използва правилната версия на всеки пакет, от който се нуждае, и че всеки от тези пакети също има правилните зависимости.

Освен това Pipenv генерира списък на зависимостите на вашия проект, които могат да пътуват с него, позволявайки на други потребители или разработчици да настроят същия проект по същия начин. Други потребители също ще трябва да инсталират Pipenv, за да настроят правилно проект, управляван от Pipenv, но за щастие инсталирането и използването на Pipenv е бриз. 

Как работи Pipenv

Обикновено, когато създавате проект на Python и използвате виртуална среда за неговите пакети, имате задача да създадете сами виртуалната среда (с помощта на командата  py -m venv), да инсталирате зависимости в нея и да проследявате зависимостите ръчно.

Pipenv предоставя начин да направите всичко това полуавтоматично. Виртуалната среда за вашия проект се създава и управлява за вас, когато инсталирате пакети чрез интерфейса на командния ред на Pipenv. Зависимостите се проследяват и заключват и можете да управлявате отделно зависимостите за разработка и изпълнение. Можете също така да мигрирате от съществуващи стари requirements.txtфайлове, така че не е нужно да разкъсвате проекта си и да го стартирате отначало, за да използвате добре Pipenv.

Имайте предвид, че за разлика от други инструменти за управление на проекти на Python (като Poetry), Pipenv не управлява „скелето“ на вашия проект. Тоест, Pipenv не създава вътрешната структура на директорията на проекта с фалшиви тестове, документации и т.н., а се фокусира главно върху управлението на пакети и среда. Това прави Pipenv добър избор, ако просто искате инструмент, който да се фокусира върху виртуална среда и пакети, а не цялостно решение.

Започнете с Pipenv

Pipenv инсталира по същия начин, тъй като повечето всеки друг пакет Python: pip install --user pipenv. Препоръчва се --userопцията да предпази Pipenv от конфликт с други общосистемни пакети. Също така трябва да добавите пътя към двоичната директория на потребителската база към системния път, така че командите на Pipenv да бъдат насочени към правилното място.

Ако планирате да направите Pipenv последователна част от вашия работен процес, също е добра идея да поддържате основната си инсталация на Python възможно най-минимална. Този съвет се отнася за повечето инсталации на Python, които използват виртуална среда.

Създайте нов проект с Pipenv

За да започнете напълно нов проект с Pipenv, просто създайте директория и я попълнете с файловете, които обикновено създавате за проект. Ако сте склонни да скелирате проект, докато вървите, можете да започнете с празна директория.

Инсталирането на пакети за проект не е значително по-различно с Pipenv, отколкото с Pip; всъщност синтаксисът е почти същият. Отворете конзола в директорията на вашия проект и въведете, за pipenv install да инсталирате пакет за проекта. За да посочите, че пакетът е за разработка , използвайте -dфлага. Можете да използвате pip синтаксис, за да обозначите конкретна версия на пакет (например, black==13.0b1).

Когато инсталирате пакет с Pipenv, се случват две неща. Първо, Pipenv ще провери дали вече е създадена виртуална среда за тази директория на проекта. Ако да, Pipenv ще инсталира пакета в съществуващата виртуална среда. Ако не, Pipenv ще създаде виртуална среда, която използва същото издание на Python, използвано за стартиране на Pipenv. Имайте предвид, че виртуалната среда не е създадена в самата директория на проекта; той е създаден в директория, управлявана от Pipenv във вашия потребителски профил.

Второ, Pipenv ще инсталира заявените пакети във виртуалната среда. Когато инсталацията приключи, Pipenv ще докладва за всичко, което е направил, включително път към виртуалната среда, ако трябва да я създаде.

Обикновено не е необходимо да знаете пътя към виртуалната среда, която Pipenv създава. За да активирате средата, просто отидете до директорията на вашия проект и използвайте, за  pipenv shellда стартирате нова сесия на обвивката или използвайте, за  pipenv run да стартирате директно команда. Например използвайте  pipenv run mypyза стартиране на версията на инструмента от командния ред на mypy(ако приемем, че mypyинструментът е инсталиран във виртуалната среда) или pipenv run python -m за изпълнение на модул Python, наличен във виртуалната среда.

Pipenv и заключващи файлове

Надникнете в директорията, след като сте инсталирали пакети с Pipenv, и ще видите два файла Pipfileи Pipfile.lock. И двете се генерират автоматично от Pipenv и не трябва да се редактират директно, тъй като те описват състоянието на пакетите в проекта.

Pipfileе по-простото от двете. Той просто изброява пакетите, необходими за проекта, откъдето са инсталирани (по подразбиране е PyPI) и коя версия на Python е необходима за стартиране на всичко. Pipfile.lockе по-сложен. Той изброява всеки пакет заедно с подробности за версията и SHA-256 хешове, генерирани от пакета. Хешовете се използват, за да гарантират, че инсталираните пакети съвпадат точно с посоченото - не само номера на версията, но и полученото съдържание.

Когато работите по проект, който използва Pipenv за управление на пакети, ще искате да добавите Pipfileи Pipfile.lockфайловете в хранилището за контрол на версиите за проекта. Всички промени, направени в пакетите за вашия проект, от своя страна ще променят тези файлове, така че тези промени трябва да бъдат проследявани и версирани.

Използвайте проект Pipenv

Ако изтеглите хранилище на източник за проект, който използва Pipenv за управление на пакети, всичко, което трябва да направите, е да разопаковате съдържанието на хранилището в директория и да стартирате pipenv install(не са необходими имена на пакети). Pipenv ще прочете Pipfileи Pipfile.lockфайловете за проекта, ще създаде виртуалната среда и ще инсталира всички зависимости, ако е необходимо.

И накрая, ако искате да използвате Pipenv за управление на проект, който в момента използва requirements.txtфайл, просто отидете до директорията на проекта и стартирайте pipenv install. Pipenv ще открие  requirements.txt(или можете да използвате -rфлага, за да го посочите) и ще мигрира всички изисквания в a Pipfile.