Pipenv is a tool that provides all necessary means to create a virtual environment for your Python project. It automatically manages project packages through the Pipfile file as you install or uninstall packages.
Pipenv also generates the Pipfile.lock file, which is used to produce deterministic builds and create a snapshot of your working environment. This might be particularly helpful for security sensitive deployment, when project requirements and packages versions are critical. For more details about pipenv, see project documentation at pipenv.pypa.io.
To use Pipenv with PyCharm, you need to implement several preparation steps.
Install Pipenv
-
Run the following command to ensure you have pip installed in your system:
$ pip --version
You should expect to receive a system response indicating the pip version. If no pip is discovered, install it as described in the Installation Instructions. Alternatively, you can download and install Python from http://python.org.
-
Install
pipenv
by running the following command:$ pip install --user pipenv
When installation completes, you will see the following message:
-
For your convenience, you might add the user base’s binary directory to your
PATH
environmental variable. If you skip this procedure, PyCharm will prompt you to specify the path to the pipenv executable when adding a pipenv environment.-
Run the following command:
$ py -m site --user-site
A sample output can be:
C:UsersjetbrainsAppDataRoamingPythonPython37site-packages
-
Replace
site-packages
withScripts
in this path to receive a string for adding to thePATH
variable, for example:$ setx PATH "%PATH%;C:UsersjetbrainsAppDataRoamingPythonPython37Scripts"
-
Run the following command to find the user base’s binary directory:
$ python -m site --user-base
An example of output can be
/Users/jetbrains/.local (macOS) or /home/jetbrains/.local (Linux)
-
Add bin to this path to receive a string for adding to the ~/.bashrc file, for example:
$ export PATH="$PATH:/Users/jetbrains/.local/bin"
-
Run the following command to make the changes effective:
$ source ~/.bashrc
-
Ensure you have enabled bashrc in your bash_profile.
-
At any time you can alter the specified path to the pipenv executable in the project settings. In the Settings dialog (Ctrl+Alt+S), navigate to , and type the target path in the Path ot Pipenv executable field.
After the preparation steps are done, you can use pipenv to create a virtual environment for new or existing projects.
Set pipenv for a new Python project
-
Initiate creating a new Python project as described in Creating a pure Python project.
-
In the New Project dialog, click
to expand the Python Interpreter node, select New environment using, and from the list of available virtual environments select Pipenv.
-
In the left-hand pane of the Add Python Interpreter dialog, select Pipenv Environment.
-
If you have added the user base binary directory to your
PATH
environment variable, you don’t need to set any additional options: the path to the pipenv executable will be autodetected. -
Click OK to complete the task.
-
If you don’t have the base binary directory in
PATH
, PyCharm shows an error message: Pipenv executable is not found. Discover the proper executable path as described in the pipenv installation procedure and enter the target string in the Pipenv executable field, for example: C:UsersjetbrainsAppDataRoamingPythonPython37Scriptspipenv.exe (Windows) or /Users/jetbrains/.local/bin/pipenv (macOS).Click OK to save the changes and complete the task.
You can also set up pipenv for any of your earlier created projects.
Configure pipenv for an existing Python project
-
Do one of the following:
-
Click the Python Interpreter selector and choose Add New Interpreter.
-
Press Ctrl+Alt+S to open Settings and go to . Click the Add Interpreter link next to the list of the available interpreters.
-
Click the Python Interpreter selector and choose Interpreter Settings. Click the Add Interpreter link next to the list of the available interpreters.
-
-
Select Add Local Interpreter.
-
In the left-hand pane of the Add Python Interpreter dialog, select Pipenv Environment.
-
Choose the base interpreter from the list, or click
and find the desired Python executable in your file system.
-
If you have added the base binary directory to your
PATH
environmental variable, you don’t need to set any additional options: the path to the pipenv executable will be autodetected.If the pipenv executable is not found, follow the pipenv installation procedure to discover the executable path, and then paste it in the Pipenv executable field.
-
Click OK to complete the task.
Once all the steps are done, the new pipenv environment is set for your project and the packages listed in the Pipfile are installed.
If you open a project with a Pipfile file added but no any interpreter configured, PyCharm offers you to use Pipenv environment.
If you select this option, PyCharm sets pipenv for you automatically. Alternatively, you can click Configure Python interpreter to follow the standard workflow.
Similarly, when you open a project with a Pipfile file in PyCharm for the very first time, for example, by checking it out from the Version Control, the Pipenv virtual environment will be configured automatically.
When you have set the Pipenv virtual environment as a Python interpreter, all available packages are added from the source defined in Pipfile . The packages are installed, removed, and updated in the list of the packages through pipenv rather than through pip.
PyCharm can create a Pipenv environment for your project based on the project requirements recorded in the Pipfile.
Create an environment using the Pipfile
-
Open any directory with your source files that contains the Pipenv file: select from the main menu and choose the directory.
-
If no any environment has been created for this project, PyCharm suggests creating it:
-
If PyCharm cannot autodetect the pipenv executable, specify a path to it. Click OK to complete the task.
Once you click OK, PyCharm creates an environment and installs all the required packages.
Note that if you ignore a suggestion to create a pipenv environment, PyCharm won’t create a Python interperter for your project. So, any time when you open a .py file, you’ll see the warning with the options for configuring a project interpreter:
For any of the configured Python interpreters (but Docker-based), you can:
- Manage interpreter paths
- Install, uninstall, and upgrade packages
Last modified: 14 December 2022
Содержание:развернуть
- Чем хорош Pipenv
- Установка
- Пример использования
-
Создаем виртуальную среду
-
Устанавливаем пакеты
-
Запускаем скрипты
- Настройка pipenv в PyCharm
- Команды pipenv
- Pipenv и Docker
- Конфигурирование pipenv
- Стоит ли использовать Pipenv?
Pipenv — менеджер зависимостей для Python-проектов. С его помощью можно создавать виртуальные среды и управлять зависимостями приложений. Pipenv решает ряд проблем, которые возникали при использовании pip, virtualenv и requirements.txt.
Данный инструмент аналогичен npm у NodeJS, или composer у PHP, и является официально рекомендуемым менеджером зависимостей для Python. Подробнее о том, кому он будет полезен и как им пользоваться, рассмотрим ниже.
Чем хорош Pipenv
Рано или поздно, каждый разработчик сталкивается с проблемой контроля версий пакетов pip и настройкой виртуального окружения. С помощью Pipenv вы можете:
- Управлять окружениями (env);
- Управлять пакетами: устанавливать, удалять, обновлять (pip);
- Устанавливать детерминированный набор пакетов (Pipfile.lock).
⚡ Можно забыть про pip и virtualenv.
Вам больше не нужно использовать pip и virtualenv по отдельности. В pipenv этот функционал реализован «из коробки».
⚡ Requirements.txt больше не нужен.
Для своей работы менеджер использует 2 файла: Pipfile
(по сути замена requirements.txt) и Pipfile.lock
(связывает версии пакетов, тем самым обеспечивая дополнительную безопасность).
Когда вы запускаете проект с Pipenv, он автоматически создает виртуальную среду для текущего проекта, даже если вы еще не используете ее. Pipenv управляет зависимостями, отказавшись от привычного requirements.txt
, и заменяя его на новый документ под названием Pipfile
. Когда вы устанавливаете библиотеку с помощью Pipenv, файл Pipfile
для проекта автоматически обновляется с указанием сведений об этой установке, включая информацию о версии, расположение хранилища Git, путь к файлу и другую информацию.
Пример файла Pipfile
:
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
questionary = "*"
[requires]
python_version = "3.7"
Ваше приложение может зависеть от конкретной версии библиотеки, а эта библиотека может зависеть от конкретной версии другой библиотеки. Если производить настройку вручную, во всем этом очень просто запутаться 🤷. Pipenv создан, чтобы облегчить эту задачу. Он отслеживает дерево взаимозависимостей вашего приложения в файле с именем Pipfile.lock
В свою очередь, Pipfile.lock
также проверяет, используются ли корректные версии зависимостей.
Пример файла Pipfile.lock
:
{
"_meta": {
"hash": {
"sha256": "bb84bcf0496484d8725eb675984e488d0..."
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.7"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"questionary": {
"hashes": [
"sha256:7d4f98c9e5a1c0cd7e45a2c13959d5df9de...",
"sha256:87ffc9dab940ec962c54fe2eec3a4eecb10..."
],
"index": "pypi",
"version": "==1.4.0"
}
},
"develop": {}
}
Pipenv удобен, когда над проектом работают несколько разработчиков. Рассмотрим простой пример — компания ведет разработку своего корпоративного сайта. Мария работает над вкладкой «Отчеты», Иван — над вкладкой «Чат».
- Для того чтобы отчеты создавались быстрее, Мария решает обновить некоторые питон-библиотеки.
- В течение 2-х дней она разрабатывает новый функционал для отчетов.
- Мария фиксирует изменения в git репозитории, но забывает запустить
pip freeze
. Файлrequirements.txt
остается в репозитории со старыми версиями библиотек. - Иван затягивает из репозитория изменения Марии, и внезапно выясняется, что его вкладка «Чат» стала выпадать с ошибкой.
- Помимо этого, CI сборка тоже сломалась 😢
Требуется время, чтобы понять, что проблема в файле requirements.txt
, где находятся старые версии библиотек.
Если бы Иван и Мария использовали Pipenv, Pipfile
был бы автоматически обновлен и включен в коммит Марии. Они бы сэкономили время и завершили свой продукт быстрее. Вот что делает Pipenv таким важным.
⚡ Возможность создавать собственные шорткаты.
Pipenv позволяет создавать собственные шорткаты (сокращения) в секции [scripts]
файла Pipfile
:
[scripts]
print_hello = "python -c "print('Hello')""
Теперь в консоли вы можете вызвать шорткат командой pipenv run print_hello
⚡ Автоматизация рутинных задач.
Больше не придется тратить время на выполнение рутинных задач, выискивая причины отсутствия синхронизации и возникновения ошибок в версиях. Всю рутинную работу pipenv берет на себя:
- автоматически генерирует
Pipfile
; - автоматически удаляет/добавляет записи в
Pipfile
при установке/удалении пакетов; - автоматически создает virtualenv;
- автоматически подгружает данные из
.env
файлов и т.д.
Установка
Самый простой вариант — установка с помощью pip.
pip install pipenv
Для Linux и MacOS есть альтернативный способ установки:
Для MacOS:
brew install pipenv
Для Debian:
sudo apt install pipenv
Для Fedora:
sudo dnf install pipenv
Для FreeBSD:
pkg install py36-pipenv
После установки, вы можете фактически забыть о pip — pipenv по сути заменяет pip и virtualenv.
Пример использования
Рассмотрим простой пример использования pipenv.
Создаем виртуальную среду
Для инициализации виртуальной среды Python 3, выполните команду:
pipenv shell
Если виртуальной среды еще не существует, она будет создана.
💭 Также вы можете принудительно создать среду Python 3 или Python 2. Для этого нужно выполнить команды pipenv --three
или pipenv --two
.
Устанавливаем пакеты
Далее можно установить сторонний пакет. Существует 3 варианта установки:
Вариант #1. Указываем пакет, который нужно установить
pipenv install scrapy
Установится последняя версия пакета.
При этом в Pipfile
добавится запись scrapy = "*"
Вариант #2. Не указываем пакет (установка пакетов из Pipfile)
pipenv install
Установятся все пакеты из Pipfile
и обновится Pipfile.lock
Вариант #3. Не указываем пакет (установка пакетов из Pipfile.lock)
pipenv sync
Установятся все пакеты из Pipfile.lock
Запускаем скрипты
Запустить python-скрипты можно несколькими способами:
Способ #1. Активируем виртуальное окружение командой pipenv shell
, далее выполняем python script-name.py
Способ #2. Запустить скрипт сразу внутри оболочки virtualenv можно командой:
pipenv run python script-name.py
Настройка pipenv в PyCharm
Процесс настройки pipenv в PyCharm:
- В настройках откройте вкладку «Project Interpreter» —
File > Settings > Project: ProjectName > Project Interpreter.
- Нажмите на шестеренку рядом с выпадающим списком и выберите «Add«.
- В списке слева выберите «Pipenv Environment«.
- Далее вы можете создать новое окружение «New environment» или использовать существующее «Existing environment«.
После того как все шаги выполнены, для текущего проекта устанавливается новая среда pipenv и устанавливаются пакеты, перечисленные в Pipfile.
Если вы открываете какой-либо проект с добавленным файлом Pipfile, но в нем не настроен интерпретатор, PyCharm предложит вам использовать среду Pipenv. Если вы выберете эту опцию, PyCharm автоматически установит для вас pipenv.
Если PyCharm покажет сообщение об ошибке: Pipenv executable is not found, введите правильный путь к исполняемому файлу в настройках «Pipenv Environment«, например: C:UsersjetbrainsAppDataRoamingPythonPython37Scriptspipenv.exe (Windows).
Команды pipenv
Общие:
pipenv shell
— активация виртуального окружения;exit
— выход из виртуального окружения;pipenv check
— проверка на наличие уязвимостей безопасности.
Управление пакетами:
pipenv install
— установка всех пакетов изPipfile
;pipenv install scrapy==1.8.0
— установит фиксированную версию пакета;pipenv install selenium --dev
— установит selenium как пакет только для разработки;pipenv install --system
— установка зависимостей в родительскую систему;pipenv uninstall scrapy
— удаление пакета;pipenv uninstall --all
— удаление всех установленных пакетов в виртуальной среде.
Pipfile.lock:
pipenv lock
— генерацияPipfile.lock
;pipenv sync
— установка пакетов изPipfile.lock
;pipenv clean
— удаление из virtualenv всех пакетов, которых нет вPipfile.lock
.
Информация:
pipenv --where
— путь до текущий проект;pipenv --venv
— путь до virtualenv;pipenv --py
— путь до интерпретатора;pipenv graph
— отображение графа зависимостей.
Pipenv и Docker
Способ #1. Простой способ использовать pipenv в сборке Docker — экспортировать файл require.txt. Вы можете сделать это вне сборки Docker, и просто передать полученный файл в систему управления версиями, а затем использовать Dockerfile. Выполнить это можно следующим образом:
pipenv lock --requirements > requirements.txt
Плюс в том, что Dockerfile не нужно ничего знать о pipenv. Иначе, это потребовало бы обновлять файл require.txt
при каждом обновлении Pipfile.lock
.
В качестве альтернативы можно выполнить экспорт в самой сборке:
FROM python:3.7
RUN pip install pipenv
COPY Pipfile* /tmp
RUN cd /tmp && pipenv lock --requirements > requirements.txt
RUN pip install -r /tmp/requirements.txt
COPY . /tmp/myapp
RUN pip install /tmp/myapp
CMD flask run exampleapp:app
Способ #2. Второй вариант связан с использованием дополнительных флагов при установке пакетов.
pipenv install --deploy --system
--deploy
— pipenv выдаст ошибку если Pipfile.lock устарел, вместо того, чтобы сгенерировать новый Pipfile.lock файл.
--system
— устанавливать зависимости в родительскую систему.
Рассмотрим пример Dockerfile для развертывания Flask приложения:
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 . .
EXPOSE 8000
CMD [ "gunicorn", "-b0.0.0.0:8000", "wsgi:app" ]
Конфигурирование pipenv
Pipenv дает возможность конфигурировать свое поведение с помощью переменных окружения (Environment Variables). Просто создайте переменную и pipenv обнаружит её. Вот некоторые их них:
PIPENV_VENV_IN_PROJECT
— создаст виртуальное окружение.venv
в папке с проектом;PIPENV_YES
— автоматически соглашаться со всеми диалогами;PIPENV_DONT_LOAD_ENV
— не загружать файл .env;PIPENV_INSTALL_TIMEOUT
— максимальное время ожидания установки пакета (сек.);PIPENV_MAX_SUBPROCESS
— количество подпроцессов, используемых во время установки;PIPENV_PIPFILE
— путь до файлаPipfile
.
Полный список переменных можно посмотреть через pipenv --envs
:
Официальная документация по конфигурированию pipenv — «Configuration With Environment Variables«. Расшифровка некоторых переменных тут.
Стоит ли использовать Pipenv?
Определенно да! 🎉 Pipenv сведет всю работу по управлению пакетами и виртуальным окружением в одну консоль, решит проблему с версионированием пакетов и добавит новый, весьма приятный функционал.
мне нужен krakenex в проекте, поэтому я импортирую его с
import krakenex
у меня есть одна версия krakenex в
/ пользователи/X/библиотека/Python/3.6/lib / python / site-packages
. Когда я выполняю скрипт и
print(krakenex)
он показывает мне путь, упомянутый выше.
в будущем я хочу использовать модули из пакетов, которые я установил, например
pipenv install krakenex
С приоритетом.
как я удалось это сделать? Достаточно ли добавить путь виртуальной среды к пути sys или есть более элегантный способ?
3 ответов
вы должны указывать интерпретатор проекта на virtualenv python bin. Таким образом, в PyCharm File->Settings->Project: ProjectName->Project Interpreter, затем должны отображаться окна, показывающие интерпретатор проекта.
рядом с верхним раскрывающимся списком находится шестеренка, и вы захотите добавить Local и перейти к virtualenvs python bin. Что-то вроде virtualenvs/virtualenv_name/bin/python
. Тогда ваш проект должен указывать на нужное место.
49
автор: ForFunAndProfit
чтобы добавить больше разъяснений о том, как настроить PyCharm с pipenv на данный момент:
-
выполнить в каталоге проекта
pipenv —venv
сохранить вывод, вы будете ссылаться на этот путь позже
-
в PyCharm Откройте настройки проекта, а затем выберите интерпретатор проекта
-
нажмите Добавить интерпретатор Python > системный интерпретатор > выберите Python Интерпретатор и вставьте вывод из первой команды, добавив /bin/python в конец.
обратите внимание, что вам нужно будет использовать командную строку для установки любых пакетов, так как PyCharm в настоящее время не поддерживает pipenv в своих инструментах управления пакетами. Однако, у меня не было проблем с этим методом.
13
автор: Lawrence Coleman
PyCharm изначально поддерживает pipenv с версии 2018.2
. PyCharm 2018.2 автоматически создает pipenv при открытии проекта с помощью Pipfile и упрощает создание новых проектов с помощью pipenvs.
для существующих проектов
как уже говорилось ранее, для существующих проектов с Pipfile
, когда вы открываете файл Python, PyCharm спросит вас, Хотите ли вы установить зависимости от Pipfile.lock
.
для новых проектов
для нового проекта вы можете использовать панель интерпретатора проекта для создания Pipenv
на основе интерпретатора проекта.