2. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Who am I
Andreu Vallbona @avallbona
Bachelor degree in computer science
Web developer at APSL, Mallorca, Spain
Mainly developing with Python and Django
3. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
What we do at APSL
Web development
Systems engineering - devops
Data science
Mobile apps
Consulting and formation
4. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
What it is?
it’s a package and virtualenv
managing system
it’s aimed to replace
the use of pip and virtualenv
5. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Created by
Kenneth Reitz
Creator of many
useful projects such as:
Requests: HTTP for Humans
Maya: Datetimes for Humans
Records: SQL for Humans
Requests-HTML: HTML Parsing for Humans
6. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Current state of the art
Before pipenv we used to
create a python environment
with virtualenv
install some packages
freeze the dependencies
7. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
requirements.txt anatomy
list of dependencies
with pinned versions
8. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Problems
Problems
9. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Problems
pip and virtualenv are concepts
difficult to understand for beginners
10. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Problems
requirements.txt
is difficult to maintain
11. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Problems
we have to remember
to update the requirements.txt file
12. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Problems
For different environments
we need to maintain
several requirements.txt files
13. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Problems
we do not easily know
what python version
the project uses
14. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Problems
transitive relations
A -> B -> C
15. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Solutions
Solutions
16. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
What problems does pipenv solve?
avoid manually maintenance
of the dependencies
17. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
What problems does pipenv solve?
easy to know which
version of python
the project uses
18. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
What problems does pipenv solve?
show us the dependencies
in a more concise way
19. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
What problems does pipenv solve?
update dependencies
securely and automatically
20. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
What problems does pipenv solve?
allow us to have a
default environment
and a development environment
21. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Installation
Installation
22. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Installation
pip install --user pipenv
23. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Pipfile anatomy
Specify the packages we want
Production and development
sections
Human readable
Toml format
Specify the python version
24. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Pipfile.lock anatomy
Specify the packages we need
Json format
Machine readable
Easy to parse
Pinned versions
Hashes
25. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Pipfile.lock anatomy
Specify the packages we need
Json format
Machine readable
Easy to parse
Pinned versions
Hashes
26. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
Usage
27. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
pipenv install
creates the virtualenv
28. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
29. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
pipenv shell
activates the virtualenv
30. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
31. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
pipenv install <package-name>
install a package
32. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
33. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
pipenv install <package-name> --dev
install a package
in the development environment
34. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
35. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
pipenv uninstall <package-name>
uninstall a package
36. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
37. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
pipenv clean
uninstall packages
not specified in Pipfile.lock
38. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
39. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
pipenv graph
Displays currently installed
dependency graph information
40. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
41. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
pipenv run command
runs a command inside
the virtualenv without activating it
42. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
43. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
pipenv check
checks for security vulnerabilities
44. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
45. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
pipenv lock -r > requirements.txt
generates a requirements.txt file
46. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
47. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
pipenv install -r requirements.txt
imports a requirements.txt file
48. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
49. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
50. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
load .env files automatically
51. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Usage
52. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
usage
pipenv install -c .
can discover requirements
from the codebase
53. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
usage
54. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
usage
pipenv check --unused .
show potentially
unused dependencies
55. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
usage
56. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Integration
Integration
57. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Integration with pyenv
pipenv --python 3.4.1 install
integrates well with pyenv
58. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Integration with pyenv
59. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Integration with docker
60. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
Integration with platforms and editors
integrated with
platforms and editors
Heroku (Cloud Hosting)
Platform.sh (Cloud Hosting)
PyUp (Security Notification)
Emacs (Editor Integration)
Fish Shell
(Automatic $ pipenv shell!)
VS Code (Editor Integration)
PyCharm (Editor Integration)
61. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
utility
Utility
62. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
utility
Pipenv Pipes
https://github.com/gtalarico/pipenv-pipes
Pipenv Environment Switcher
63. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
utility
64. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
caveats
Caveats
65. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
caveats
It’s slow when locking dependencies
Always tries to update
dependencies by default
66. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
alternatives
Alternatives
67. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
alternatives
Poetry
https://poetry.eustace.io/
Hatch
https://github.com/ofek/hatch
68. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
thanks
Thank you!
Questions?
@avallbona
69. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
resources of interest
https://www.pythonforbeginners.com/basics/how-to-use-pip-and-pypi
https://realpython.com/pipenv-guide/
https://www.kennethreitz.org/essays/announcing-pipenv
https://nvie.com/posts/better-package-management/
https://nvie.com/posts/pin-your-packages/
https://medium.com/@jimjh/managing-dependencies-in-python-applications-b9c93dda98c2
70. Pipenv: Python Dev Workflow for Humans
Andreu Vallbona - PyBCN - February 2019
resources of interest
https://www.promptworks.com/blog/pin-all-dependencies
https://www.well-typed.com/blog/2008/04/the-dreaded-diamond-dependency-problem/
https://medium.com/@DJetelina/pipenv-review-after-using-in-production-a05e7176f3f0
https://chriswarrick.com/blog/2018/07/17/pipenv-promises-a-lot-delivers-very-little/
https://np.reddit.com/r/Python/comments/8jd6aq/why_is_pipenv_the_recommended_packaging_tool_by/
http://journal.kennethreitz.org/entry/r-python