Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)
Обзор
Python - один из самых дружественных, но самых мощных языков. Новичкам легко его освоить, но он обладает сильным ударом и широко используется в различных областях, таких как научное программирование, программирование веб-приложений и DevOps. Но одним из слабых мест Python была его поддержка упаковки сложных приложений и их зависимостей.
За эти годы было много усилий, чтобы улучшить ситуацию. В августе 2017 года я написал учебник о современном состоянии упаковки Python: как писать, упаковывать и распространять библиотеку в Python.
Прошло всего четыре месяца, и в городе появился новый игрок. Pipenv теперь официально рекомендованный инструмент для упаковки PyPA (Python Packaging Authority). Из этого руководства вы узнаете, почему Pipenv значительно улучшает состояние упаковки и общий процесс разработки для разработчиков на Python и как эффективно его использовать.
Python Dev Workflow для людей
Цель Pipenv - улучшить рабочий процесс разработчиков Python, когда дело доходит до управления зависимостями и виртуальными средами. Это еще одна замечательная библиотека от трудолюбивого Кеннета Рейтца, который известен в основном пакетом requests (HTTP для людей), но написал несколько других превосходных пакетов.
Нужен ли нам еще один упаковочный инструмент?
Да! Pipenv берет страницу из современных методов управления пакетами и импортирует их в мир Python.
Установка Pipenv
Вы можете установить Pipenv с помощью команды pip install pipenv
. Вы получите хороший результат с Emojis:
$ pip install pipenv ✨🍰✨
$ curl https://github.com/pypa/pipenv/blob/master/get-pipenv.py
| python
>
~/git > mkdir testpipenv ~/git > cd testpipenv ~/git/testpipenv > pipenv --three Output: Creating a virtualenv for this project… Using /usr/local/bin/python3 to create virtualenv… ⠋Running virtualenv with interpreter /usr/local/bin/python3 Using base prefix '/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6' New python executable in /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy/bin/python3.6 Also creating executable in /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy/bin/python Installing setuptools, pip, wheel...done. Virtualenv location: /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy Creating a Pipfile for this project…
~/git/testpipenv > pipenv install requests Output: 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 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.11.5-py2.py3-none-any.whl Collecting urllib3<1.23,>=1.21.1 (from requests) Using cached urllib3-1.22-py2.py3-none-any.whl Installing collected packages: idna, chardet, certifi, urllib3, requests Successfully installed certifi-2017.11.5 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22 Adding requests to Pipfile's [packages]… PS: You have excellent taste! ✨ 🍰 ✨ Locking [dev-packages] dependencies… Locking [packages] dependencies… Updated Pipfile.lock (7b8df8)!<Уровень детализации отличный, и в нем тоже используются приятные цвета. Вот полученный Pipfile:e:
[[source]] url = "https://pypi.python.org/simple" verify_ssl = true name = "pypi" [dev-packages] [packages] requests = "*" [requires] python_version = "3.6"
{ "_meta": { "hash": { "sha256": "33a0ec7c8e3bae6f62dd618f847de92ece20e2bd4efb496927e2524b9c7b8df8" }, "host-environment-markers": { "implementation_name": "cpython", "implementation_version": "3.6.3", "os_name": "posix", "platform_machine": "x86_64", "platform_python_implementation": "CPython", "platform_release": "16.7.0", "platform_system": "Darwin", "platform_version": "Darwin Kernel Version 16.7.0: Wed Oct 4 00:17:00 PDT 2017; root:xnu-3789.71.6~1/RELEASE_X86_64", "python_full_version": "3.6.3", "python_version": "3.6", "sys_platform": "darwin" }, "pipfile-spec": 6, "requires": { "python_version": "3.6" }, "sources": [ { "name": "pypi", "url": "https://pypi.python.org/simple", "verify_ssl": true } ] }, "default": { "certifi": { "hashes": [ "sha256:244be0d93b71e93fc0a0a479862051414d0e00e16435707e5bf5000f92e04694", "sha256:5ec74291ca1136b40f0379e1128ff80e866597e4e2c1e755739a913bbc3613c0" ], "version": "==2017.11.5" }, "chardet": { "hashes": [ "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691", "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae" ], "version": "==3.0.4" }, "idna": { "hashes": [ "sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4", "sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f" ], "version": "==2.6" }, "requests": { "hashes": [ "sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b", "sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e" ], "version": "==2.18.4" }, "urllib3": { "hashes": [ "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b", "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f" ], "version": "==1.22" } }, "develop": {}<Если вы хотите увидеть график всех ваших зависимостей, введите:
pipenv graph
e>
~/git/testpipenv > pipenv graph requests==2.18.4 - certifi [required: >=2017.4.17, installed: 2017.11.5] - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4] - idna [required: <2.7,>=2.5, installed: 2.6] - urllib3 [required: >=1.21.1,<1.23, installed: 1.22]
run
и shell
. .
<Вы используете pipenv run python your_programm.py
, и вы используете pipenv shell
для запуска новой оболочки с вашим интерпретатором Python виртуальной среды. Вот как использовать команду оболочки для запуска интерактивного сеанса Python, который использует пакет установленных запросов, чтобы получить цитату дня из REST API. Виртуальная среда активируется, и при запуске Python используется правильный интерпретатор, где доступны requests
.e.
~/git/testpipenv > pipenv shell Spawning environment shell (/bin/bash). Use 'exit' to leave. source /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy/bin/activate ~/git/testpipenv > source /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy/bin/activate (testpipenv-0GShD6dy) ~/git/testpipenv > python Python 3.6.3 (default, Nov 19 2017, 16:39:12) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.38)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import requests >>> r = requests.get('https://quotes.rest/qod') >>> r.ok True >>> r.json() {'success': {'total': 1}, 'contents': {'quotes': [{'quote': 'Hang Out with People Who are Better than You.', 'author': 'Warren Buffett', 'length': None, 'tags': ['getting-better', 'inspire', 'people'], 'category': 'inspire', 'title': 'Inspiring Quote of the day', 'date': '2018-01-03', 'id': None}], 'copyright': '2017-19 theysaidso.com'}} >>> quote = r.json()['contents']['quotes'][0]['quote'] >>> author = r.json()['contents']['quotes'][0]['author'] >>> print(f'{quote} ~~ {author}') Hang Out with People Who are Better than You. ~~ Warren Buffett >>>
pipenv install -r <путь/к/requirements.txt>.
>.
<Все ваши зависимости будут импортированы в Pipfile. Чтобы фактически установить зависимости и сгенерировать Pipfile.lock, вам нужно выполнить pipenv install
. После того, как вы убедились, что все работает должным образом, вы можете удалить свой файл needs.txt.e.
<Если ваш файл needs.txt существует в том же каталоге, в котором вы создаете виртуальную среду, то Pipenv автоматически сгенерирует Pip-файл. Но имейте в виду, что если ваш файл require.txt содержит закрепленные версии, они также будут закреплены в Pipfile. В мире Pipenv закрепление должно происходить в файле Pipfile.lock. Pipenv даст дружеское напоминание:w:
~/git/testpipenv > cat requirements.txt requests==2.18.4 ~/git/testpipenv > pipenv --three Creating a virtualenv for this project… Using /usr/local/bin/python3 to create virtualenv… ⠋Running virtualenv with interpreter /usr/local/bin/python3 Using base prefix '/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6' New python executable in /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy/bin/python3.6 Also creating executable in /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy/bin/python Installing setuptools, pip, wheel...done. Virtualenv location: /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy Requirements.txt found, instead of Pipfile! Converting… Warning: Your Pipfile now contains pinned versions, if your requirements.txt did. We recommend updating your Pipfile to specify the "*" version, instead.<Вот закрепленная версия в Pipfile, которую рекомендуется изменить на «*»:":
[packages] requests = "==2.18.4"<Давайте установим зависимости сейчас:w:
~/git/testpipenv > pipenv install Pipfile.lock not found, creating… Locking [dev-packages] dependencies… Locking [packages] dependencies… Updated Pipfile.lock (0b0daf)! Installing dependencies from Pipfile.lock (0b0daf)… 🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 5/5 — 00:00:01 To activate this project's virtualenv, run the following: $ pipenv shell ~/git/testpipenv ><Редактируемые зависимостиies
Вы можете указать Pipenv установить путь как редактируемый. Это полезно, когда вы зависите от пакетов, которые вы разрабатываете, и хотите зависеть от вашего исходного пакета, фактически не устанавливая их каждый раз, когда вы вносите изменения. В частности, это полезно для текущего каталога, когда вы активно работаете в нем. Для этого используйте флаги
-e
и --dev
:gs:
> pipenv install '-e .' --devУ вас должен быть правильный файл setup.py.le.
<Управление вашей средой с помощью Pipenvenv
Вы уже видели многое из того, что Pipenv может сделать для вас. Давайте углубимся в некоторые дополнительные команды и опции.ns. <Установка пакетовges
Команда
pipenv install
поддерживает несколько параметров:ns:
-
<
--dev
: Установить как файлы разработки, так и пакеты по умолчанию из Pipfile.lock.ck. < --system
: использует команду system pip, а не команду вашего virtualenv.nv. < --ignore-pipfile
: игнорировать Pipfile и установить из Pipfile.lock.ck. < --skip-lock
: игнорировать файл Pipfile.lock и установить его из файла Pipfile. Кроме того, не записывает файл Pipfile.lock, отражающий изменения в файле Pipfile. e. Чтобы удалить зависимость, введите:
pipenv uninstall <имя пакета>
. Например:le:
~/git/testpipenv > pipenv uninstall requests Un-installing requests… Uninstalling requests-2.18.4: Successfully uninstalled requests-2.18.4 Removing requests from Pipfile… Locking [dev-packages] dependencies… Locking [packages] dependencies… Updated Pipfile.lock (625834)!Обратите внимание, что мне не нужно было указывать "requests == 2.8.14" при удалении, хотя это было закреплено в Pipfile.le. <Блокирование зависимостейies
Если вы хотите создать снимок ваших текущих зависимостей (например, перед релизом), используйте команду блокировки. Это ключ к детерминированным и повторяемым сборкам:
pipenv lock --pre
.e>.
<Удаление виртуальной средыent
Pipenv потрясающий, но вы можете время от времени очищать некоторые из ваших виртуальных сред: pipenv - rm
.e>.
<БезопасностьityPipfile.lock использует некоторые новые улучшения безопасности в pip. По умолчанию файл Pipfile.lock будет создан с хэшами sha256 каждого загруженного пакета. Это позволит pip гарантировать, что вы устанавливаете то, что вы собираетесь делать в скомпрометированной сети, или загружаете зависимости из ненадежной конечной точки PyPI.nt. Кроме того, Pipenv предоставляет команду
check
, которая проверяет соответствие PEP 508 - Спецификация зависимостей для пакетов программного обеспечения Python, а также безопасность пакетов:ty:
~/git/testpipenv > pipenv check . Checking PEP 508 requirements… Passed! Checking installed package safety… All good!<Заключениеion Pipenv наконец-то выводит упаковку Python на передний край современной разработки программного обеспечения. Он черпает вдохновение из других успешных систем управления зависимостями, таких как Rust's Cargo и Javascript's Yarn. n. Он сочетает в себе виртуальные среды и управление пакетами и обеспечивает превосходное взаимодействие с красивыми и красочными информационными сообщениями и неявными лучшими практиками! Я настоятельно рекомендую вам начать использовать Pipenv для управления проектами Python.ts. Кроме того, не стесняйтесь посмотреть, что у нас есть в наличии для продажи и для изучения на рынке Envato, и не стесняйтесь задавать любые вопросы и предоставлять ценные отзывы, используя канал комментариев ниже.ow.
Envato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post