Как установить pipenv pycharm на windows

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 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

  1. 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.

  2. Install pipenv by running the following command:

    $ pip install --user pipenv

    When installation completes, you will see the following message:

    System response on successful pipenv installation

  3. 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.

    1. Run the following command:

      $ py -m site --user-site

      A sample output can be:

      C:UsersjetbrainsAppDataRoamingPythonPython37site-packages

    2. Replace site-packages with Scripts in this path to receive a string for adding to the PATH variable, for example:

      $ setx PATH "%PATH%;C:UsersjetbrainsAppDataRoamingPythonPython37Scripts"

    1. 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)

    2. Add bin to this path to receive a string for adding to the ~/.bashrc file, for example:

      $ export PATH="$PATH:/Users/jetbrains/.local/bin"

    3. Run the following command to make the changes effective:

      $ source ~/.bashrc

    4. 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

  1. Initiate creating a new Python project as described in Creating a pure Python project.

  2. In the New Project dialog, click Expand to expand the Python Interpreter node, select New environment using, and from the list of available virtual environments select Pipenv.

    Select Pipenv when creating a new Python project

  3. In the left-hand pane of the Add Python Interpreter dialog, select Pipenv Environment.

  4. 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.

    Path to the pipenv executable is autodetected

  5. Click OK to complete the task.

  6. 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

  1. 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.

  2. Select Add Local Interpreter.

  3. In the left-hand pane of the Add Python Interpreter dialog, select Pipenv Environment.

    Adding a Pipenv environment

  4. Choose the base interpreter from the list, or click Choose the base interpreter and find the desired Python executable in your file system.

  5. 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.

  6. 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.

Pipenv inspection

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

  1. Open any directory with your source files that contains the Pipenv file: select from the main menu and choose the directory.

  2. If no any environment has been created for this project, PyCharm suggests creating it:

    Create a pipenv environment using the requirements.txt file

  3. 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:

Warning with 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:

  1. В настройках откройте вкладку «Project Interpreter» — File > Settings > Project: ProjectName > Project Interpreter.
  2. Нажмите на шестеренку рядом с выпадающим списком и выберите «Add«.
  3. В списке слева выберите «Pipenv Environment«.
  4. Далее вы можете создать новое окружение «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.

Официальная документация по конфигурированию pipenv — «Configuration With Environment Variables«. Расшифровка некоторых переменных тут.

Стоит ли использовать Pipenv?

Определенно да! 🎉 Pipenv сведет всю работу по управлению пакетами и виртуальным окружением в одну консоль, решит проблему с версионированием пакетов и добавит новый, весьма приятный функционал.

I need krakenex in a project, so I import it with

import krakenex

I have one version of krakenex in

/Users/x/Library/Python/3.6/lib/python/site-packages

. When I execute the script and

print(krakenex)

it shows me the path mentioned above.

In the future, I want to use the modules from the packages I installed with e.g.

pipenv install krakenex

with priority.

How do I manage to do that? Is it sufficient to add the path of the virtual environment to the sys path, or is there a more elegant way?

asked Sep 16, 2017 at 7:34

Chris Jung's user avatar

2

You should be pointing your Project Interpreter to the virtualenv python bin. So in PyCharm File->Settings->Project: ProjectName->Project Interpreter, then a windows showing the Project Interpreter should be displayed.

Project Interpreter

Next to the top dropdown is a gear and your going to want to Add Local and navigate to the virtualenvs python bin. Something like virtualenvs/virtualenv_name/bin/python. Then your project should be pointing to the right place.

thomas.mc.work's user avatar

answered Sep 21, 2017 at 20:00

ForFunAndProfit's user avatar

10

To add more clarification on how to setup PyCharm with pipenv for now:

  1. Execute in your project directory

    pipenv —venv

Save the output, you’ll reference this path later

  1. In PyCharm, Open Project Settings, and then select project interpreter
    Preferences > Project Interpreter

  2. Click Add a Python Interpreter > System Interpreter > Select Python Interpreter and paste the output from the first command, appending /bin/python onto the end.
    enter image description here

Note that you will need to use the command line to install any packages since PyCharm currently doesn’t support pipenv in their package management tools. However, I haven’t had a problem with this method.

answered Jun 7, 2018 at 20:50

Lawrence Coleman's user avatar

PyCharm natively supports pipenv since version 2018.2. PyCharm 2018.2 will automatically create a pipenv when you open a project with a Pipfile, and makes it easy to create new projects with pipenvs.

For existing projects

As previously stated, for existing projects with a Pipfile, when you open a Python file, PyCharm will ask you if you want to install the dependencies from the Pipfile.lock.

pipenv for existing projects

For new projects

For a new project, you can use the project interpreter panel to create a Pipenv based project interpreter.

enter image description here

answered Jul 27, 2018 at 23:28

lmiguelvargasf's user avatar

lmiguelvargasflmiguelvargasf

59k44 gold badges216 silver badges220 bronze badges

4

Make sure to update PyCharm. I updated to 2018.3.

Export path for pipenv: $ export PATH="$PATH:Users/{user_name}/.local/bin"

PyCharm will then automatically detect pipenv under new environment using dropbox. Reference image here and see full blog post here.

answered Dec 12, 2018 at 21:11

Adnan Murtaza's user avatar

2020 год 5 месяц 10 день2021 год 2 месяц 28 день

Среды Anaconda было достаточно, если она подходит для анализа данных, машинного обучения и глубокого обучения, но я также хотел попробовать парсинг и использование API.В результате количество установок пакетов, за которыми не следила conda, увеличилось, поэтому я сделал решительный шаг и закончил Anaconda и чистый Python («».ваниль ПитонЯ восстановлю окружающую среду.Здесь я оставлю процедуру.

Как создать среду Python PyCharm + pipenv в Windows 10

Во-первых, если включен Anaconda и т. Д., Удалите его перед установкой простого Python.

Установка компилятора C

При установке пакета python, такого как numpy, вам понадобится компилятор C, включенный в Anaconda.

Вам может понадобиться компилятор C для установки расширений Python. В Windows нет компилятора C, поэтому при необходимости установите его отдельно.

python japan: установка компилятора C

Вот как это сделать.

Как установить компилятор C

ваниль ПитонУстановка

(XNUMX) Установите установщик python, который соответствует указанной ниже ОС.

https://www.python.org/downloads/

Щелкните здесь, чтобы скачать установщик Python 10 (выпуск от 64 марта 3.7.7 г.) через Интернет для 10-разрядной версии Windows 2020 →Веб-установщик Windows x86-64

(XNUMX) После загрузки запустите его, отметьте «установить программу запуска для всех пользователей» и «Добавить Python xx в путь» и выберите «Установить сейчас».

Установка pipenv

① Откройте командную строкуpy -m pip install pipenvВходить

* Если вы получаете сообщение об ошибке «Не удалось собрать колеса, так как колесо пакета не установлено»,py -m pip install wheelУстановить колесо с.

Установить PyCharm

Я упоминал здесь.

Как установить PyCharm (Windows)

Настройки для включения PyCharm + pipenv

Создайте среду pipenv как проект PyCharm

  1. Откройте PyCharm → Создайте новый проект.
  2. Интерпретатор проекта: выберите «Pipenv».
  3. Укажите простой Python, установленный на базовом интерпретаторе.
    В моем случае «C: Users username AppData Local Programs Python Python37 python.exe»
  4. Укажите путь к pipenv, установленному в исполняемом файле Pipenv
    В основном в папке под Python.В моем случае «C: Users username AppData Local Programs Python Python37 Script pipenv.exe»
  5. Нажмите «Создать».

Вы можете установить пакет в созданную виртуальную среду pipenv из «Терминала» в проекте (по умолчанию находится на нижней вкладке).pip installВы можете сделать это с помощью.


Pipenv Tutorial

This tutorial will walk you through how to install pipenv and manage packages and dependencies with pipenv.

Detailed pipenv doc ref to : https://realpython.com/pipenv-guide/

Prerequisite

  • Install python interpreter.
  • Install pip
  • Upgrade pip to latest version

Upgrade pip:

python -m pip install --upgrade pip

Use system wide pip to install pipenv:

Check pipenv installation location:

Output:

C:python37Scriptspipenv.exe

Check pipenv version:

Output

Check system wide python packages:

Output:

Package          Version
---------------- ---------
certifi          2018.4.16
pip              18.0
pipenv           2018.7.1
setuptools       40.0.0
virtualenv       16.0.0
virtualenv-clone 0.3.0

Create virtual environment with pipenv

Create a project folder and cd to that folder and run pipenv install to initialize an empty virtual environment:

cd c:demoproject-a
pipenv install

Output:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
Creating a virtualenv for this project...
Pipfile: C:demoproject-aPipfile
Using c:python37python.exe (3.7.0) to create virtualenv...
Already using interpreter c:python37python.exe
Using base prefix 'c:\python37'

Virtualenv location: C:Usersuser_name.virtualenvsproject-a-x_uLKVn6
Creating a Pipfile for this project...
Pipfile.lock not found, creating...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Updated Pipfile.lock (a65489)!
Installing dependencies from Pipfile.lock (a65489)...
  ================================ 0/0 - 00:00:00
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.

Pipfile and Pipfile.lock will be created in this project folder. Virtual environment will be created in default path C:Usersuser_name.virtualenvsproject-a-x_uLKVn6.

Create a portable venv

Open a cmd and set environment variable WORKON_HOME:

export WORKON_HOME=~/venv

Run pipenv install to create a virtual environment in desired directory other than user’s directory. Copy and paste the whole venv folder to the same directory on other machine. To active this environment by running the active shell program in ./Scripts folder for different platform.

Install packages with pipenv

Change directory to project folder and install packages with pipenv install instead of pip install:

pipenv install psutil==5.4.8
pipenv install requests

A specific version number will be recorded in Pipfile or a * will be recorded if version number is not provided. Example content of Pipfile:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
psutil = "==5.4.8"
requests = "*"

[requires]
python_version = "3.7"

The Pipfile.lock will be generated by pipenv and all the packages and dependencies with specific versions at this time will be recorded. You can produce the exact same environment with Pipfile.lock by running command pipenv sync to other project folder or other machine with the same platform.

Note

DO NOT change Pipfile.lock manually since it contains the hashes of all the dependencies.

Activate pipenv environment

Spawn a sub shell to activate this environment:

Output:

(demo-liOaUuB5) C:pipenvdemo

Hit exit to exit pipenv shell.

Active virtual environment without entering sub shell:

pipenv run pip list
# or
pipenv run python hello.py

Reproduce environment from Pipfile.lock

Copy Pipfile and Pipfile.lock to your project folder and restore the same environment:

The sync sub command will create and restore the environment from Pipfile.lock.

Set Pycharm interpreter with existing Pipfile

Pycharm creates pipenv virtual environment from Pipfile.lock by default. Copy Pipfile and Pipfile.lock to project root folder. Open pycharm settings window(Ctrl+Alt+S). Add a new Python interpreter by selecting pipenv environment. Wait until it’s finished then check the installed packages specified in Pipfile.

Tip

Pycharm could fail to create pipenv from Pipfile sometimes, you might consider create virtual environment from commandline manually.

https://farm3.staticflickr.com/2943/33485660921_dfc0494739_k_d.jpg

This tutorial walks you through installing and using Python packages.

It will show you how to install and use the necessary tools and make strong
recommendations on best practices. Keep in mind that Python is used for a great
many different purposes, and precisely how you want to manage your dependencies
may change based on how you decide to publish your software. The guidance
presented here is most directly applicable to the development and deployment of
network services (including web applications), but is also very well suited to
managing development and testing environments for any kind of project.

Note

This guide is written for Python 3, however, these instructions
should work fine on Python 2.7—if you are still using it, for some reason.

☤ Make sure you’ve got Python & pip¶

Before you go any further, make sure you have Python and that it’s available
from your command line. You can check this by simply running:

You should get some output like 3.6.2. If you do not have Python, please
install the latest 3.x version from python.org or refer to the
Installing Python section of The Hitchhiker’s Guide to Python.

Note

If you’re newcomer and you get an error like this:

>>> python
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'python' is not defined

It’s because this command is intended to be run in a shell (also called
a terminal or console). See the Python for Beginners
getting started tutorial for an introduction to using your operating
system’s shell and interacting with Python.

Additionally, you’ll need to make sure you have pip available. You can
check this by running:

$ pip --version
pip 9.0.1

If you installed Python from source, with an installer from python.org, or
via `Homebrew`_ you should already have pip. If you’re on Linux and installed
using your OS package manager, you may have to install pip separately.

If you plan to install pipenv using Homebrew you can skip this step. The
Homebrew installer takes care of pip for you.

☤ Installing Pipenv¶

Pipenv is a dependency manager for Python projects. If you’re familiar
with Node.js’ npm or Ruby’s bundler, it is similar in spirit to those
tools. While pip can install Python packages, Pipenv is recommended as
it’s a higher-level tool that simplifies dependency management for common use
cases.

Use pip to install Pipenv:

$ pip install --user pipenv

Note

This does a user installation to prevent breaking any system-wide
packages. If pipenv isn’t available in your shell after installation,
you’ll need to add the user base’s binary directory to your PATH.

On Linux and macOS you can find the user base binary directory by running
python -m site --user-base and adding bin to the end. For example,
this will typically print ~/.local (with ~ expanded to the
absolute path to your home directory) so you’ll need to add
~/.local/bin to your PATH. You can set your PATH permanently by
modifying ~/.profile.

On Windows you can find the user base binary directory by running
py -m site --user-site and replacing site-packages with
Scripts. For example, this could return
C:UsersUsernameAppDataRoamingPython36site-packages so you would
need to set your PATH to include
C:UsersUsernameAppDataRoamingPython36Scripts. You can set your
user PATH permanently in the Control Panel. You may need to log
out for the PATH changes to take effect.

☤ Installing packages for your project¶

Pipenv manages dependencies on a per-project basis. To install packages,
change into your project’s directory (or just an empty directory for this
tutorial) and run:

$ cd myproject
$ pipenv install requests

Pipenv will install the excellent Requests library and create a Pipfile
for you in your project’s directory. The Pipfile is used to track which
dependencies your project needs in case you need to re-install them, such as
when you share your project with others. You should get output similar to this
(although the exact paths shown will vary):

Creating a Pipfile for this project...
Creating a virtualenv for this project...
Using base prefix '/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6'
New python executable in ~/.local/share/virtualenvs/tmp-agwWamBd/bin/python3.6
Also creating executable in ~/.local/share/virtualenvs/tmp-agwWamBd/bin/python
Installing setuptools, pip, wheel...done.

Virtualenv location: ~/.local/share/virtualenvs/tmp-agwWamBd
Installing requests...
Collecting requests
  Using cached requests-2.18.4-py2.py3-none-any.whl
Collecting idna<2.7,>=2.5 (from requests)
  Using cached idna-2.6-py2.py3-none-any.whl
Collecting urllib3<1.23,>=1.21.1 (from requests)
  Using cached urllib3-1.22-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Using cached chardet-3.0.4-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests)
  Using cached certifi-2017.7.27.1-py2.py3-none-any.whl
Installing collected packages: idna, urllib3, chardet, certifi, requests
Successfully installed certifi-2017.7.27.1 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22

Adding requests to Pipfile's [packages]...
P.S. You have excellent taste! ✨ 🍰 ✨

☤ Using installed packages¶

Now that Requests is installed you can create a simple main.py file to
use it:

import requests

response = requests.get('https://httpbin.org/ip')

print('Your IP is {0}'.format(response.json()['origin']))

Then you can run this script using pipenv run:

$ pipenv run python main.py

You should get output similar to this:

Using $ pipenv run ensures that your installed packages are available to
your script. It’s also possible to spawn a new shell that ensures all commands
have access to your installed packages with $ pipenv shell.

☤ Next steps¶

Congratulations, you now know how to install and use Python packages! ✨ 🍰 ✨

☤ Homebrew Installation of Pipenv¶

Homebrew is a popular open-source package management system for macOS.

Installing pipenv via Homebrew will keep pipenv and all of its dependencies in
an isolated virtual environment so it doesn’t interfere with the rest of your
Python installation.

Once you have installed Homebrew simply run:

To upgrade pipenv at any time:

☤ Pragmatic Installation of Pipenv¶

If you have a working installation of pip, and maintain certain “toolchain” type Python modules as global utilities in your user environment, pip user installs allow for installation into your home directory. Note that due to interaction between dependencies, you should limit tools installed in this way to basic building blocks for a Python workflow like virtualenv, pipenv, tox, and similar software.

To install:

$ pip install --user pipenv

For more information see the user installs documentation, but to add the installed cli tools from a pip user install to your path, add the output of:

$ python -c "import site; import os; print(os.path.join(site.USER_BASE, 'bin'))"

To upgrade pipenv at any time:

$ pip install --user --upgrade pipenv

☤ Crude Installation of Pipenv¶

If you don’t even have pip installed, you can use this crude installation method, which will bootstrap your whole system:

$ curl https://raw.githubusercontent.com/ken/pipenv/master/get-pipenv.py | python

Congratulations, you now have pip and Pipenv installed!

Pipenv & Virtual Environments

https://farm3.staticflickr.com/2943/33485660921_dfc0494739_k_d.jpg

This tutorial walks you through installing and using Python packages.

It will show you how to install and use the necessary tools and make strong
recommendations on best practices. Keep in mind that Python is used for a great
many different purposes, and precisely how you want to manage your dependencies
may change based on how you decide to publish your software. The guidance
presented here is most directly applicable to the development and deployment of
network services (including web applications), but is also very well suited to
managing development and testing environments for any kind of project.

Note

This guide is written for Python 3, however, these instructions
should work fine on Python 2.7—if you are still using it, for some reason.

☤ Make sure you’ve got Python & pip

Before you go any further, make sure you have Python and that it’s available
from your command line. You can check this by simply running:

$ python --version

You should get some output like 3.10.8. If you do not have Python, please
install the latest 3.x version from python.org or refer to the
Installing Python section of The Hitchhiker’s Guide to Python.

Note

If you’re newcomer and you get an error like this:

>>> python
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'python' is not defined

It’s because this command is intended to be run in a shell (also called
a terminal or console). See the Python for Beginners
getting started tutorial for an introduction to using your operating
system’s shell and interacting with Python.

Additionally, you’ll need to make sure you have pip available. You can
check this by running:

$ pip --version
pip 22.3.1

If you installed Python from source, with an installer from python.org, via Homebrew or via Linuxbrew you should already have pip. If you’re on Linux and installed
using your OS package manager, you may have to install pip separately.

If you plan to install Pipenv using Homebrew or Linuxbrew you can skip this step. The
Homebrew/Linuxbrew installer takes care of pip for you.

☤ Installing Pipenv

It is recommended that users on most platforms should install pipenv from pypi.org using pip install pipenv.

☤ Isolated Installation of Pipenv with Pipx

Pipx is a tool to help you install and run end-user applications written in Python. It installs applications
into an isolated and clean environment on their own. To install pipx, just run:

$ pip install --user pipx

Once you have pipx ready on your system, continue to install Pipenv:

$ pipx install pipenv

☤ Pragmatic Installation of Pipenv

If you have a working installation of pip, and maintain certain «tool-chain» type Python modules as global utilities in your user environment, pip user installs allow for installation into your home directory. Note that due to interaction between dependencies, you should limit tools installed in this way to basic building blocks for a Python workflow like virtualenv, pipenv, tox, and similar software.

To install:

$ pip install --user pipenv

Note

This does a user installation to prevent breaking any system-wide
packages. If pipenv isn’t available in your shell after installation,
you’ll need to add the user base’s binary directory to your PATH.

On Linux and macOS you can find the user base binary directory by running
python -m site --user-base and adding bin to the end. For example,
this will typically print ~/.local (with ~ expanded to the
absolute path to your home directory) so you’ll need to add
~/.local/bin to your PATH. You can set your PATH permanently by
modifying ~/.profile.

On Windows you can find the user base binary directory by running
python -m site --user-site and replacing site-packages with
Scripts. For example, this could return
C:UsersUsernameAppDataRoamingPython36site-packages so you would
need to set your PATH to include
C:UsersUsernameAppDataRoamingPython36Scripts. You can set your
user PATH permanently in the Control Panel. You may need to log
out for the PATH changes to take effect.

For more information, see the user installs documentation.

To upgrade pipenv at any time:

$ pip install --user --upgrade pipenv

☤ Crude Installation of Pipenv

If you don’t even have pip installed, you can use this crude installation method, which will bootstrap your whole system:

$ curl https://raw.githubusercontent.com/pypa/pipenv/master/get-pipenv.py | python

☤ Homebrew Installation of Pipenv(Discouraged)

Homebrew is a popular open-source package management system for macOS. For Linux users, Linuxbrew is a Linux port of that.

Installing pipenv via Homebrew or Linuxbrew will keep pipenv and all of its dependencies in
an isolated virtual environment so it doesn’t interfere with the rest of your
Python installation.

Once you have installed Homebrew or Linuxbrew simply run:

$ brew install pipenv

To upgrade pipenv at any time:

$ brew upgrade pipenv

Note

Homebrew installation is discouraged because each time the Homebrew Python is upgraded, which Pipenv depends on,
users have to re-install Pipenv, and perhaps all virtual environments managed by it.

☤ Installing packages for your project

Pipenv manages dependencies on a per-project basis. To install packages,
change into your project’s directory (or just an empty directory for this
tutorial) and run:

$ cd myproject
$ pipenv install requests

Note

Pipenv is designed to be used by non-privileged OS users. It is not meant
to install or handle packages for the whole OS. Running Pipenv as root
or with sudo (or Admin on Windows) is highly discouraged and might
lead to unintend breakage of your OS.

Pipenv will install the excellent Requests library and create a Pipfile
for you in your project’s directory. The Pipfile is used to track which
dependencies your project needs in case you need to re-install them, such as
when you share your project with others. You should get output similar to this
(although the exact paths shown will vary):

pipenv install requests
Creating a virtualenv for this project...
Pipfile: /home/user/myproject/Pipfile
sing /home/user/.local/share/virtualenvs/pipenv-Cv0J3wbi/bin/python3.9 (3.9.9) to create virtualenv...
 Creating virtual environment...created virtual environment CPython3.9.9.final.0-64 in 1142ms
 creator CPython3Posix(dest=/home/user/.local/share/virtualenvs/myproject-R3jRVewK, clear=False, no_vcs_ignore=False, global=False)
 seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/user/.local/share/virtualenv)
   added seed packages: pip==21.3.1, setuptools==60.2.0, wheel==0.37.1
 activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

✔ Successfully created virtual environment!
Virtualenv location: /home/user/.local/share/virtualenvs/pms-R3jRVewK
Creating a Pipfile for this project...
Installing requests...
Adding requests to Pipfile's [packages]...
Installation Succeeded
Pipfile.lock not found, creating...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Updated Pipfile.lock (fe5a22)!
Installing dependencies from Pipfile.lock (fe5a22)...
🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00

☤ Using installed packages

Now that Requests is installed you can create a simple main.py file to
use it:

import requests

response = requests.get('https://httpbin.org/ip')

print('Your IP is {0}'.format(response.json()['origin']))

Then you can run this script using pipenv run:

$ pipenv run python main.py

You should get output similar to this:

Your IP is 8.8.8.8

Using $ pipenv run ensures that your installed packages are available to
your script. It’s also possible to spawn a new shell that ensures all commands
have access to your installed packages with $ pipenv shell.

☤ Virtualenv mapping caveat

  • Pipenv automatically maps projects to their specific virtualenvs.
  • By default, the virtualenv is stored globally with the name of the project’s root directory plus the hash of the full path to the project’s root (e.g., my_project-a3de50).
  • Should you change your project’s path, you break such a default mapping and pipenv will no longer be able to find and to use the project’s virtualenv.
  • Customize this behavior with PIPENV_CUSTOM_VENV_NAME environment variable.
  • You might also prefer to set PIPENV_VENV_IN_PROJECT=1 in your .env or .bashrc/.zshrc (or other shell configuration file) for creating the virtualenv inside your project’s directory.

☤ Next steps

Congratulations, you now know how to get started with pipenv, for additional details refer to the basic and advanced documentation. ✨ 🍰 ✨

pipenv — это замечательный проект, который призван упростить
организацию рабочего процесса для Python-разработчиков. Он
решает несколько наиболее актуальных для разработчика проблем
(да, несколько, вопреки Unix-way).
Этакий швейцарский нож для питонистов.

pipenv нельзя рассматривать как замену pip, скорее это надстройка над
pip. Но даже
PyPA всерьёз рекомендует
рассмотреть pipenv для управления зависимостями приложений, что как
минимум означает, что проект хорошо зарекомендовал себя в сообществе.

Изначальный автор проекта —
Кеннет Рейц (Kenneth Reitz) — он ещё
и автор requests и множества
других проектов «for humans»,
очевидно, вдохновлялся пакетными менеджерами из других экосистем,
такими как npm (JavaScript)
и bundler (Ruby), так что если вы когда-то
пользовались этими инструментами, то можете заметить множество параллелей.

В названии проекта кроются два основных его назначения:

  • pip — установка и управления зависимостями проекта;
  • env — создание и управление виртуальным окружением для проекта.

Грубо говоря, pipenv можно рассматривать как симбиоз утилит pip и
venv (или virtualenv), которые работают вместе, пряча многие
неудобные детали от конечного пользователя.

Помимо этого pipenv ещё умеет вот такое:

  • автоматически находить интерпретатор Python нужной версии
    (находит даже интерпретаторы, установленные через
    pyenv
    и asdf!);
  • запускать вспомогательные скрипты для разработки;
  • загружать переменные окружения из файла .env;
  • проверять зависимости на наличие известных уязвимостей.

Стоит сразу оговориться, что если вы разрабатываете библиотеку (или
что-то, что устанавливается через pip, и должно работать на нескольких
версиях интерпретатора),
то pipenv — не ваш путь. Этот инструмент создан в первую очередь
для разработчиков конечных приложений (консольных утилит, микросервисов,
веб-сервисов). Формат хранения зависимостей подразумевает работу
только на одной конкретной версии интерпретатора (это имеет смысл для
конечных приложений, но для библиотек это, как правило, не приемлемо).
Для разработчиков библиотек существует другой прекрасный инструмент —
poetry.

Итак, начнём по порядку.

Установка

Как я писал в посте про виртуальные окружения,
не стоит устанавливать пакеты в глобальный интерпретатор, поэтому предпочтительным
способом установки является пакетный менеджер вашей ОС.

Например, на MacOS pipenv можно установить через brew:

А на Fedora Linux вот так:

$ sudo dnf install pipenv

На Ubuntu можно установить pipenv из специального PPA:

$ sudo apt install software-properties-common python-software-properties
$ sudo add-apt-repository ppa:pypa/ppa
$ sudo apt update
$ sudo apt install pipenv

Во всех остальных случаях, в частности на Windows, самый простой способ — это установка
в домашнюю директорию пользователя
(опять же, см. пост про виртуальные окружения):

$ pip install --user pipenv

Теперь проверим установку:

$ pipenv --version
pipenv, version 2018.11.26

Если вы получили похожий вывод, значит, всё в порядке.

При возникновении проблем с установкой, обратитесь к
официальной документации.
Если совсем беда, то напишите комментарий под этим постом,
попробуем помочь 😊

Файлы pipenv

pipenv использует свой собственный формат файла для описания зависимостей
проекта — Pipfile.
Этот файл имеет формат TOML.
В принципе его можно редактировать руками, но pipenv достаточно неплохо
и сам умеет обновлять этот файл, когда вы просто работаете с утилитой
через командную строку. Структуру этого файла рассмотрим чуть позже.

В паре с Pipfile идёт Pipfile.lock. Он имеет формат JSON и не
предназначен для редактирования руками. Этот файл хранит контрольные
суммы пакетов, которые вы устанавливаете в проект, что даёт гарантию,
что развёрнутые на разных машинах окружения будут идентичны друг другу.
pipenv автоматически обновляет контрольные суммы в этом файле, когда
вы устанавливаете или обновляете зависимости. При развёртывании окружения
pipenv сверит сохранённые контрольные суммы с фактически
получившимися, и в случае чего уведомит вас, что развёртывание
не удалось. Это очень важный плюс в копилку pipenv по сравнению с pip.

Оба этих файла можно и нужно сохранять в системе контроля версий (git).

Вообще, идею использовать два файла для описания зависимостей нельзя
назвать новой.
Здесь явно прослеживается параллель между Gemfile и Gemfile.lock
из мира Ruby и package.json и package-lock.json из мира JavaScript.
Все эти файлы имеют схожее назначение.

Использование

Инициализация проекта

Давайте создадим простой проект под управлением pipenv.

Подготовка:

$ mkdir pipenv_demo
$ cd pipenv_demo

Создать новый проект, использующий конкретную версию Python можно вот такой командой:

Если же вам не нужно указывать версию так конкретно, то есть шорткаты:

# Создает проект с Python 3, версию выберет автоматически.
$ pipenv --three

# Аналогично с Python 2.
# В 2020 году эта опция противопоказана.
$ pipenv --two

После выполнения одной из этих команд, pipenv создал файл Pipfile и
виртуальное окружение где-то в заранее определенной директории
(по умолчанию вне директории проекта).

$ cat Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]

[requires]
python_version = "3.8"

Это минимальный образец Pipfile. В секции [[source]] перечисляются
индексы пакетов — сейчас тут только PyPI, но может быть и ваш
собственный индекс пакетов. В секциях [packages] и [dev-packages]
перечисляются зависимости приложения — те, которые нужны для непосредственной
работы приложения (минимум), и те, которые нужны для разработки (запуск
тестов, линтеры и прочее). В секции [requires] указана версия интерпретатора,
на которой данное приложение может работать.

Очень полезно правильно разделять зависимости на «основные» и «разработческие».
Это позволит уменьшить размер окружения при развёртывании на
продакшн (например, размер Docker-образа). Кроме того, чем меньше в системе,
работающей на продакшне, установлено пакетов, тем меньше потенциальных уязвимостей.

Если вам нужно узнать, где именно pipenv создал виртуальное окружение
(например, для настройки IDE), то сделать это можно вот так:

$ pipenv --py
/Users/and-semakin/.local/share/virtualenvs/pipenv_demo-1dgGUSFy/bin/python

Управление зависимостями через pipenv

Теперь давайте установим в проект первую зависимость. Делается
это при помощи команды pipenv install:

$ pipenv install requests

Давайте посмотрим, что поменялось в Pipfile (здесь и дальше я
буду сокращать вывод команд или содержимое файлов при помощи ...):

$ cat Pipfile
...

[packages]
requests = "*"

...

В секцию [packages] добавилась зависимость requests с версией *
(версия не фиксирована).

А теперь давайте установим зависимость, которая нужна для разработки,
например, восхитительный линтер flake8,
передав флаг --dev в ту же команду install:

$ pipenv install --dev flake8

$ cat Pipfile
...

[dev-packages]
flake8 = "*"

...

Теперь можно увидеть всё дерево зависимостей проекта при помощи команды
pipenv graph:

$ pipenv graph
flake8==3.7.9
  - entrypoints [required: >=0.3.0,<0.4.0, installed: 0.3]
  - mccabe [required: >=0.6.0,<0.7.0, installed: 0.6.1]
  - pycodestyle [required: >=2.5.0,<2.6.0, installed: 2.5.0]
  - pyflakes [required: >=2.1.0,<2.2.0, installed: 2.1.1]
requests==2.23.0
  - certifi [required: >=2017.4.17, installed: 2020.4.5.1]
  - chardet [required: >=3.0.2,<4, installed: 3.0.4]
  - idna [required: >=2.5,<3, installed: 2.9]
  - urllib3 [required: >=1.21.1,<1.26,!=1.25.1,!=1.25.0, installed: 1.25.9]

Это бывает полезно, чтобы узнать, что от чего зависит, или почему в вашем
виртуальном окружении есть определённый пакет.

Также, пока мы устанавливали пакеты, pipenv создал Pipfile.lock,
но этот файл длинный и не интересный, поэтому показывать содержимое я не буду.

Удаление и обновление зависимостей происходит при помощи команд
pipenv uninstall и pipenv update соответственно. Работают они довольно
интуитивно, но если возникают вопросы, то вы всегда можете получить
справку при помощи флага --help:

$ pipenv uninstall --help
$ pipenv update --help

Управление виртуальными окружениями

Давайте удалим созданное виртуальное окружение:

И представим себя в роли другого разработчика, который только присоединился
к вашему проекту. Чтобы создать виртуальное окружение и установить
в него зависимости нужно выполнить следующую команду:

Эта команда на основе Pipfile.lock воссоздаст точно то же самое виртуальное
окружение, что и у других разработчиков проекта.

Если же вам не нужны dev-зависимости (например, вы разворачиваете ваш
проект на продакшн), то можно не передавать флаг --dev:

Чтобы «войти» внутрь виртуального окружения, нужно выполнить:

$ pipenv shell
(pipenv_demo) $

В этом режиме будут доступны все установленные пакеты, а имена python и pip
будут указывать на соответствующие программы внутри виртуального окружения.

Есть и другой способ запускать что-то внутри виртуального окружения без
создания нового шелла:

# это запустит REPL внутри виртуального окружения
$ pipenv run python

# а вот так можно запустить какой-нибудь файл
$ pipenv run python script.py

# а так можно получить список пакетов внутри виртуального окружения
$ pipenv run pip freeze

Переменные окружения

Согласно идеологии 12-факторных приложений, конфигурацию принято хранить
отдельно от кода, а лучше всего конфигурацию вообще
хранить в переменных окружения
(environment variables или env vars). Чтобы упростить работу с
переменными окружения в процессе разработки, широкое айти-сообщество придумало
сохранять их в специальный файл .env и загружать в шелл по мере
необходимости. Такие файлы используются во множестве фреймворков,
инструментов и экосистем.
pipenv упрощает работу с переменными окружения в Python-проектах.

Давайте создадим файл .env и запишем туда какое-нибудь значение:

SECRET_VALUE=hello pipenv!

ВАЖНО: файл .env может содержать пароли для подключения к СУБД
или токены для доступа к внешним сервисам. Такие данные никогда не должны
попадать в git.

Давайте напишем небольшой скрипт (script.py), который будет использовать эту
переменную окружения:

import os

print("Secret value:", os.environ.get("SECRET_VALUE"))

Попробуем запустить его без использования pipenv:

$ python script.py
Secret value: None

Скрипт вместо секретного значения вывел None, потому что переменная
окружения так и осталась просто лежать в файле, и никак не повлияла на
работу скрипта. А теперь запустим этот же скрипт через pipenv:

$ pipenv run python script.py
Loading .env environment variables…
Secret value: hello pipenv!

pipenv увидел файл .env и автоматически загрузил переменные из него.
Скрипт вывел то значение, которое мы и ожидали увидеть. Команда
pipenv shell тоже подгружает переменные окружения из файла.

Запуск скриптов

Часто в процессе разработки встречаются повторяющиеся задачи. Если вы
работаете в команде, то ваши коллеги наверняка тоже с ними сталкиваются.
Было бы разумно сохранить/задокументировать где-то команды, нужные
для решения этих повторяющихся задач, чтобы их было проще найти и чтобы
они всегда выполнялись одинаково. Можно, конечно, использовать обычные
.sh файлы, но у pipenv тоже есть инструмент, который может в
этом помочь, и даже лучше.

Допустим, что вы регулярно запускаете проверку кода flake8, но с
указанием дополнительных флагов, например, вам не нужно проверять
определенную директорию, а так же вы хотите пропускать один вид ошибок
(правильнее было бы просто сохранить эти параметры в конфигурационный файл,
но примера ради будем передавать всё через командную строку):

$ flake8 --exclude=tests --ignore=E121 .

Отредактируем Pipfile, создав там секцию [scripts] со следующим
содержимым:

[scripts]
lint = "flake8 --exclude=tests --ignore=E121 ."

Теперь тот же самый скрипт можно запустить при помощи команды:

В качестве бонуса pipenv автоматически подгрузит переменные окружения,
так что таким же образом можно выполнять и скрипты, которые зависят от
конфигурации проекта (миграции БД, очистки кэшей, удаление временных файлов,
да что угодно).

Распространённые проблемы

Перечислю проблемы, с которыми я сталкивался в процессе работы с pipenv.

Лишние зависимости в виртуальном окружении

Бывает, что кроме перечисленных в Pipfile и Pipfile.lock зависимостей
в виртуальном окружении установлены и другие пакеты. Такое может случиться,
например, при переключении между ветками в git, где в Pipfile.lock
находятся разные зависимости. Или, банально, если внутри виртуального
окружения вы установите что-то через pip помимо pipenv.

Чаще всего вам будет безразлично, есть в виртуальном окружении какие-то
лишние пакеты или нет, но иногда такие лишние пакеты влияют на работу
приложения. Пример из моей практики: ORM orator
будет использовать тот драйвер для подключения к MySQL, который первым найдёт
в виртуальном окружении, поэтому если вы хотите использовать pymysql,
то нужно убедиться, что в виртуальном окружении нет MySQLdb (он приоритетнее).

Нужно учитывать, что команда pipenv sync --dev только доустанавливает пакеты
в виртуальное окружение, но не удаляет оттуда уже установленные. Поэтому, если
вам нужно обеспечить отсутствие в виртуальном окружении лишних пакетов, то
приходится удалять его полностью и создавать заново:

$ pipenv --rm && pipenv sync --dev

Пререлизные зависимости

По умолчанию pipenv игнорирует нестабильные альфа- и бета-версии пакетов,
и устанавливает только стабильные. Может случиться так, что вам нужно
установить пререлизную версию пакета, например, автоформаттер black,
который на данный момент всё ещё не имеет стабильных релизов вообще:

$ pipenv install --dev black
...
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
ERROR: ERROR: Could not find a version that matches black
Skipped pre-versions: 18.3a0, 18.3a0, 18.3a1, 18.3a1, 18.3a2, 18.3a2, 18.3a3, 18.3a3, 18.3a4, 18.3a4, 18.4a0, 18.4a0, 18.4a1, 18.4a1, 18.4a2, 18.4a2, 18.4a3, 18.4a3, 18.4a4, 18.4a4, 18.5b0, 18.5b0, 18.5b1, 18.5b1, 18.6b0, 18.6b0, 18.6b1, 18.6b1, 18.6b2, 18.6b2, 18.6b3, 18.6b3, 18.6b4, 18.6b4, 18.9b0, 18.9b0, 19.3b0, 19.3b0, 19.10b0, 19.10b0
There are incompatible versions in the resolved dependencies.

Команда завершилась ошибкой, но pipenv предлагает воспользоваться опцией
--pre, чтобы установить пререлизную зависимость. Избегайте искушения
сделать так.

Что произойдёт, если всё-таки рискнуть:

$ pipenv install --dev --pre black
...
✔ Installation Succeeded

На первый взгляд, всё хорошо. Но давайте заглянем в Pipfile:

$ cat Pipfile
...
[pipenv]
allow_prereleases = true

Там появилась директива allow_prereleases = true, которая глобально меняет
поведение pipenv и разрешает ему устанавливать пререлизные версии
вообще любых зависимостей, а не только той, которую вы хотели установить.
Если у вас в Pipfile не ограничены версии зависимостей (как у requests = "*"),
то следующий запуск pipenv install или pipenv update может принести
в ваш проект кучу нестабильных зависимостей. Не факт, что приложение
это переживёт.

Чтобы установить пререлизную зависимость правильно, нужно указать
конкретную версию:

$ pipenv install --dev black==19.10b0

Если же вы уже попались в эту ловушку pipenv, то просто отредактируйте
Pipfile и либо удалите оттуда директиву allow_prereleases вообще,
либо поменяйте значение на false. После этого можно спать спокойно.

Мердж-конфликты в Pipfile.lock

Когда в двух параллельных ветках происходит установка или обновление
пакетов, либо просто редактируется Pipfile, то при слиянии этих веток
обязательно произойдет конфликт в Pipfile.lock. Git добавит в этот файл
маркеры конфликтов, после чего, само собой, он перестает быть валидным JSON.
В таких случаях pipenv просто превращается в тыкву и ничего не может сделать:

$ pipenv sync --dev
...
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 3 column 8 (char 24)

План выхода из такой ситуации следующий:
1. Не пытайтесь осознанно решать конфликты в Pipfile.lock вручную, всё равно
не сможете; pipenv сам создал этот файл, вот пусть сам и разбирается.
2. Разрешите конфликт в любую сторону, главное, чтобы в итоге получился
валидный JSON.
3. Пересоздайте Pipfile.lock заново:

$ pipenv lock --keep-outdated

Флаг --keep-outdated позволяет избежать лишних обновлений версий — вы
ведь просто хотите разрешить конфликты, а не обновить все пакеты, верно?
Тем не менее, pipenv может вас проигнорировать, и всё равно обновить
некоторые пакеты, будьте к этому готовы (это известный баг).

Статус проекта: пациент скорее мертв, чем жив, но надежда есть

Стоит отметить, что после какой-то драмы в сообществе,
изначальный автор (Kenneth Reitz) покинул проект (и вообще все свои проекты),
и проект перешёл в общественное достояние.
Любые такие конфликты всегда плохо сказываются на успехе проекта, и pipenv,
определенно, переживает сейчас не лучшие времена.
На данный момент последний релиз был 26 ноября 2018 года.
За полтора года накопилось большое количество незарелиженных баг-фиксов,
что говорит о проблемах с поддержкой проекта.

Несмотря на это, я всё равно рекомендую присмотреться к pipenv, потому что
он действительно хорош. Недавно проект стал проявлять
признаки жизни,
и я очень надеюсь, что всё с ним будет хорошо. По-моему, это очень
важный для экосистемы Python проект.

Обновление от 30 мая 2020: pipenv наконец выпустил
долгожданный релиз 2020.5.28.

Обновляемся:

$ pip install --user --upgrade pipenv

Проект будет жить!

Заключение

Вместо заключения оставлю вас поразмышлять над вот этой программой:

def use_pipenv():
    know_common_workflows()
    distinguish_between_main_and_dev_dependencies()
    use_dot_env_file()
    use_scripts()
    know_pitfalls()
    print("PROFIT!!!!!")


if work_on_application:
    use_pipenv()
elif work_on_library:
    use_poetry()
else:
    print("wtf")
    use_pip()

Дополнительное чтение

  • Исходный код pipenv;
  • Официальная документация;
  • Гайд на RealPython;
  • Kenneth Reitz — Pipenv: The Future of Python Dependency Management — PyCon 2018;
  • Managing Application Dependencies Tutorial.

Подпишитесь!

Чтобы получить уведомление о новом посте можно:

  • подписаться на канал в Telegram
    (альтернативная ссылка);
  • подписаться на Atom-фид, если вы олдфаг-старовер вам так удобно.

Обложка: James Case, Victorinox Swiss Army Knife

Привет всем, проект с открытым исходным кодом, который я представлю вам сегодня, — это инструмент управления виртуальной средой Python.PipenvЭто инструмент управления пакетами, официально рекомендованный Python. Можно сказать, что он объединяетvirtualenv, pipсpyenvФункции трех. Его цель — объединить сильные стороны всех инструментов управления пакетами, таких как: npm, yarn, composer и т. Д.

Проблемы, которые пытается решить Pipenv, разнообразны:

  • Нам больше не нужно вручную создавать виртуальную среду,PipenvБудет автоматически создан для нас, он создастvirtualenv Окружающая среда, а затем позвонитеpipenv shell Команда перехода в виртуальную среду.
  • Использоватьrequirements.txt Может вызвать некоторые проблемы, поэтомуPipenv ИспользоватьPipfile с Pipfile.lock Чтобы заменить его, иPipfile Если он не существует, он будет создан автоматически, и он будет автоматически обновляться при установке, обновлении и удалении зависимых пакетов.Pipfile с Pipfile.lock файл.
  • Значения хеша можно увидеть везде. Безопасность. Автоматически выявлять уязвимости безопасности.
  • Дает вам представление о графике зависимостей (например,$ pipenv graph)。
  • Просматривайте графические зависимости в любое время.
  • Автозагрузка.env Прочтите переменные среды, чтобы упростить процесс разработки.

Установить Pipenv

MacOS

$ brew install pipenv

Debian

$ sudo apt install pipenv

Fedora

$ sudo dnf install pipenv

Если у вас несколькоPythonВерсия, можно указатьPythonУстановка версии

$ python3 -m pip install pipenv

Общие команды

$ pipenv
Usage: pipenv [OPTIONS] COMMAND [ARGS]...

Options:
     --where отображает путь к файлу проекта
     --venv показывает путь к фактическому файлу в виртуальной среде
     --py показывает путь к интерпретатору Python виртуальной среды
     --envs показать переменные параметров виртуальной среды
     --rm удалить виртуальную среду
     --bare минимизировать вывод
     --completion полный вывод
     --man показать страницу справки
     --three / --two использовать Python 3/2 для создания виртуальной среды (обратите внимание на версию Python, установленную на этом компьютере)
     --python ТЕКСТ Указать версию Python в качестве источника установки виртуальной среды
     --site-packages поставляется со сторонними библиотеками, установленными в исходном интерпретаторе Python
  --jumbotron      An easter egg, effectively.
     --version информация о версии
     -h, --help справочная информация

Параметры команды

Commands:
     check Проверить наличие дыр в безопасности
     график отображает информацию о текущем графике зависимостей
     установить установить виртуальную среду или стороннюю библиотеку
     lock lock и сгенерировать файл Pipfile.lock
     открыть Просмотр библиотеки в редакторе
     запускать команды запуска в виртуальной среде
     оболочка в виртуальную среду
     удалить удалить библиотеку
     обновить удалить все текущие пакеты и установить их последнюю версию

Основное использование

Мы можем создать проект с именем PipenvTest, а затем создать новый скрипт Python, например tst_env.py, с содержимым:

import django
print(django.get_version())

Результаты приведены ниже:

1.12

Мы видим, что в системе установлена ​​версия Django 1.12. Но мы хотим, чтобы этот проект был разработан на основе Django 2.x. Конечно, мы можем обновить систему до версии Django, но это может повлиять на работу других проектов, так что это не лучший выбор. Чтобы не влиять на версию Django системного окружения, мы можем использовать Pipenv для создания виртуальной среды.

В этом каталоге введите команду pipenv, чтобы просмотреть полное использование команды:

Usage: pipenv [OPTIONS] COMMAND [ARGS]...

Options:
  --update         Update Pipenv & pip to latest.
  --where          Output project home information.
  --venv           Output virtualenv information.
  --py             Output Python interpreter information.
  --envs           Output Environment Variable options.
  --rm             Remove the virtualenv.
  --bare           Minimal output.
  --completion     Output completion (to be eval'd).
  --man            Display manpage.
  --three / --two  Use Python 3/2 when creating virtualenv.
  --python TEXT    Specify which version of Python virtualenv should use.
  --site-packages  Enable site-packages for the virtualenv.
  --jumbotron      An easter egg, effectively.
  --version        Show the version and exit.
  -h, --help       Show this message and exit.


Usage Examples:
   Create a new project using Python 3.6, specifically:
   $ pipenv --python 3.6

   Install all dependencies for a project (including dev):
   $ pipenv install --dev

   Create a lockfile containing pre-releases:
   $ pipenv lock --pre

   Show a graph of your installed dependencies:
   $ pipenv graph

   Check your installed dependencies for security vulnerabilities:
   $ pipenv check

   Install a local setup.py into your virtual environment/Pipfile:
   $ pipenv install -e .

Commands:
  check      Checks for security vulnerabilities and against PEP 508 markers
             provided in Pipfile.
  graph      Displays currently–installed dependency graph information.
  install    Installs provided packages and adds them to Pipfile, or (if none
             is given), installs all packages.
  lock       Generates Pipfile.lock.
  open       View a given module in your editor.
  run        Spawns a command installed into the virtualenv.
  shell      Spawns a shell within the virtualenv.
  uninstall  Un-installs a provided package and removes it from Pipfile.
  update     Uninstalls all packages, and re-installs package(s) in [packages]
             to latest compatible versions.

Создайте виртуальную среду

Первый шаг — убедиться, что текущий проект не создает виртуальную среду, вызовите следующую команду:

$ pipenv --venv

Результат выглядит следующим образом

No virtualenv has been created for this project yet!
Aborted!

Это показывает, что текущий проект еще не создал виртуальную среду.Далее мы используем Pipenv для создания виртуальной среды:

$ pipenv --three
 Или же
$ pipenv install --python 3.6

Создайте виртуальную среду Python3, — три представляет создание версии виртуальной среды Python3, — python может указать конкретную версию Python, конечно, если указан параметр параметра —two или —three, python2 или будет использоваться python3, в противном случае для установки будет использоваться версия python по умолчанию. Но предпосылка состоит в том, что в вашей системе должна быть установлена ​​эта версия Python.

Конечно, вы также можете указать точную информацию о версии:

$ pipenv install --python 3
$ pipenv install --python 3.6
$ pipenv install --python 2.7.14

pipenv автоматически просканирует систему, чтобы найти соответствующую информацию о версии. Если он не может найти ее и установлен pyenv, он автоматически вызовет pyenv для загрузки соответствующей версии python, в противном случае будет сообщено об ошибке.

В настоящее время в текущей среде new_env создаются два файла инициализации среды, Pipfile и Pipfile.lock.

Затем мы можем переключиться в виртуальную среду для выполнения команд и выполнения следующих команд:

$ pipenv shell 

Используйте Pipenv для установки сторонних пакетов

$ pipenv install urllib3

На данный момент Pipfile содержит информацию о вновь установленном файле пакета, такую ​​как имя и версия. Используется для переустановки зависимостей проекта или совместного использования проекта с другими, вы можете использовать Pipfile для отслеживания зависимостей проекта.

Pipfile используется для замены исходного файла requirements.txt, и его содержимое похоже на следующее. Исходная часть используется для установки адреса хранилища, часть пакетов используется для указания пакетов, от которых зависит проект, а часть dev-packages используется для определения пакетов, необходимых для среды разработки.Это разделение удобно для управления .

$ cat Pipfile

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
"urllib3" = "*"

[dev-packages]

[requires]
python_version = "3.6"

Pipfile.lock содержит информацию о вашей системе, все зависимые пакеты и информацию о версиях установленных пакетов, а также информацию о проверке хэша всех установленных пакетов и их зависимых пакетов.

$ Pipfile.lock
{
    "_meta": {
        "hash": {
            "sha256": "af58f3510cb613d4d9241128f9a0ceb9bb936ad907543e23ad8317011dcb6715"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.6"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {                
         "urllib3": {
            "hashes": [
                "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf",
                "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5"
            ],
            "index": "pypi",
            "version": "==1.23"
        }
    },
    "develop": {}
}

Тогда некоторые друзья могут спросить, в чем польза Pipfile и Pipfile.lock?

Pipfile — это на самом деле файл формата TOML, который определяет основную информацию о зависимых пакетах проекта, а также различает идентификаторы пакетов производственной среды и среды разработки.Он работает как файл requirements.txt, но имеет более мощные функции. Pipfile.lock подробно определяет точную информацию о версии установленного пакета проекта, информацию о последней доступной версии и хэш-значение текущего файла библиотеки. Как предполагает Гу Мин, он действует как блокировка версии. Вы можете заметить, что в текущий файл Pipfile.lock. Версия Django обозначена как == 2.0.2, что означает, что в настоящее время мы используем версию 2.0.2 при разработке, которая может выполнять функцию блокировки версий.

Например, мы только что установили версию Django 2.0.2, которая на данный момент является последней версией (2018.2.27). Но, возможно, Django будет обновлен в будущем. Например, однажды Django был обновлен до версии 2.1. В настоящее время, если мы хотим повторно развернуть этот проект на другом компьютере, если в это время нет файла Pipfile.lock, только файл Pipfile существует. Поскольку зависимость Django, указанная в файле Pipfile, имеет вид django = «*», то есть ограничений по версиям нет, по умолчанию будет установлена ​​последняя версия Django, то есть 2.1, но из-за наличия файла Pipfile.lock он будет установлен в соответствии с Pipfile.lock, Django 2.0.2 все равно будет установлен, что позволит избежать проблем несовместимости, вызванных некоторыми обновлениями версий библиотеки.

Помните: не изменяйте вручную ни при каких обстоятельствахPipfile.lock файл!

Общие команды

Мы можем использовать параметр — venv, чтобы получить путь к виртуальной среде:

$ pipenv --venv
/Users/kennethreitz/.local/share/virtualenvs/test-Skyy4vre

Путь к проекту

$ pipenv --where
/Users/kennethreitz/Library/Mobile Documents/com~apple~CloudDocs/repos/kr/pipenv/test

Найдите интерпретатор Python:

$ pipenv --py
/Users/kennethreitz/.local/share/virtualenvs/test-Skyy4vre/bin/python

Установите указанный программный пакет:

$ pipenv install urllib3==1.22

Установите пакет в среду разработки:
Обычно есть некоторые пакеты Python, которые нужны только в вашей среде разработки, а не в производственной среде, например, пакеты модульного тестирования. Pipenv использует флаг -dev, чтобы различать две среды.
плюс —dev означает включение зависимостей в dev-пакеты Pipfile.

$ pipenv install django --dev
Installing pytest...
...
Adding pytest to Pipfile's [dev-packages]...

Библиотека django теперь будет использоваться только в виртуальной среде разработки. Если вы хотите установить свой проект в производственной среде:

pipenv install

Это не установит пакет django.

Однако, если разработчик клонирует ваш проект в свою среду разработки, он может использовать флаг –dev, чтобы также установить django:

pipenv install --dev

Другими словами, параметр -dev помогает различать среды разработки и среды, не предназначенные для разработки, в одной виртуальной среде.

Показать график зависимостей:

$ pipenv graph
requests==2.18.4
  - certifi [required: >=2017.4.17, installed: 2017.7.27.1]
  - 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]

Создайте файл блокировки:

$ pipenv lock
Assuring all dependencies from Pipfile are installed...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Note: your project now has only default [packages] installed.
To install [dev-packages], run: $ pipenv install --dev

Удалите сторонние пакеты:

$ pipenv uninstall urllib3 
 Или же
$ pipenv uninstall --all

Пакет установки обновления

$ pipenv update urllib3

 $ pipenv update # Обновить все установочные пакеты

Проверить целостность упаковки
Беспокоитесь ли вы о том, есть ли в установленных пакетах уязвимости безопасности? Это не имеет значения, pipenv может проверить это за вас, выполните следующую команду:

$  pipenv check
Checking PEP 508 requirements…
Passed!
Checking installed package safety…
All good!

Создать Pipfile.lock
Иногда файл Pipfile.lock может не существовать или быть удален. В настоящее время мы можем использовать следующую команду для генерации:

$ pipenv lock

Выше приведены наиболее часто используемыеPipenv Команда, если вы хотите увидеть больше использования, вы можете обратиться к ее официальной документации: https://docs.pipenv.org/#pipenv-usage.

Измените источник загрузки Pipenv

Если вы думаете, что используетеpipenv installМедленная загрузка во время установки может относиться к источнику загрузки:

[[source]]
name = "pypi"
url = "https://pypi.tuna.tsinghua.edu.cn/simple/"
verify_ssl = true

[dev-packages]

[packages]
requests = "*"
paho-mqtt = "*"
pymongo = "*"
can = "*"
crypto = "*"
gvent = "*"
gevent = "*"

[requires]
python_version = "3.7"

Нужно только изменить Pipfile.

Источник загрузки Pip

Али: http://mirrors.aliyun.com/pypi/simple/
 Дубан: http://pypi.douban.com/simple/
 Цинхуа: https://pypi.tuna.tsinghua.edu.cn/simple

Конфигурация PyCharm Pipenv

Добавить интерпретатор Python

Выберите виртуальную среду Pipenv
 Базовый путь интерпретатора интерпретатора Python в собственной системе
 Исполняемый файл Pipenv означает pipenv, путь к переменной среды команды.

Выберите только что созданное имя Pipenv под проектом.

Адрес проекта: https://github.com/pypa/pipenv

Не знаете, нравится ли вам сегодняшняя рекомендация? Если вам это нравится, пожалуйста, оставьте комментарий или лайк внизу статьи, чтобы показать свою поддержку. Ваши комментарии, лайки и репосты — моя мотивация для постоянных обновлений!

Подпишитесь на ответ моего публичного аккаунта: «1024«, получите большую волну учебных ресурсов бесплатно в порядке очереди!

Понравилась статья? Поделить с друзьями:
  • Как установить qbittorrent на windows 10
  • Как установить optitex 15 на windows 10
  • Как установить pip на windows через командную строку
  • Как установить numlock при загрузке windows
  • Как установить operation flashpoint cold war crisis на windows 10