СоХабр закрыт.
С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.
Привет, мой друг!
Предположу, что для управления Python окружением в вашем проекте до сих пор используется pip и virtualenv.
Если это так, то позволь рассказать о таком инструменте, как Pipenv.
Pipenv — это современный инструмент для управления рабочим окружением в Python.
Основные возможности pipenv:
Установим последнюю версию pipenv:
$ pip install pipenv
Перейдем в каталог с Python проектом и создадим виртуальное окружение:
$ cd yourproject
$ pipenv shell
Команда автоматически создаст новое виртуальное окружение для вашего проекта, если он еще не существует.
Также, при создании окружения можно указать версию интерпретатора с помощью флага --python
, например:
$ pipenv shell --python 3.7
Выход из оболочки виртуального окружения осуществляется с помощью команды exit
:
$ exit
Для установки пакетов воспользуемся командой install
:
$ pipenv install Flask
Pipenv установит последнюю версию пакета Flask
и автоматически добавит его в Pipfile.
При установке можем задать конкретную версию пакета:
$ pipenv install Flask==1.0.2
Разработчики данного инструмента позаботились и о работе со средой разработки — работа с пакетами, необходимыми при сборке или тестировании приложения.
При указании флага --dev
, пакет будет установлен как часть среды:
$ pipenv install pytest --dev
Такие пакеты описываются в директиве dev-packages
в файле Pipfile, например:
...
[dev-packages]
pytest = "*"
pytest-flask = "*"
...
Чтобы установить все пакеты, включая пакеты среды разработки необходимо выполнить:
$ pipenv install --dev
Для удаление пакетов существует команда uninstall
:
$ pipenv uninstall Flask
Сведения об установленных пакетах и их зависимостях хранятся в файле Pipfile.lock, который генерируется автоматически и не должен быть изменен. Что позволяет создавать детерминированные сборки приложений.
Существует возможность запуска исходного кода внутри оболочки virtualenv:
$ pipenv run python yourapplication.py
При наличии файла .env команды $ pipenv shell
и $ pipenv run
, автоматически подгрузят из него переменные окружения:
$ cat .env
DEBUG=1
$ echo $DEBUG
1
Pipenv позволяет устанавливать зависимости в родительскую систему при указании флага --system
:
$ pipenv install --system
Это полезно при развертывания приложений в Docker.
При указании флага --deploy
— pipenv выдаст ошибку, если Pipfile.lock устарел или версия Python не соответсвует указанной.
Пример Dockerfile для работы с pipenv:
FROM python:3.7
RUN pip3 install pipenv
WORKDIR /usr/src/app
COPY Pipfile ./
COPY Pipfile.lock ./
RUN set -ex && pipenv install --deploy --system
COPY . .
Пример приложения на Flask с использованием возможностей Pipenv: github.com/fdhadzh/flask-pipenv-example.
комментарии (35)