SlideShare a Scribd company logo
Python Packaging
and how to improve dependency
resolution
Tatiana Al-Chueyr Martins
@tati_alchueyr
PythonDay Pernambuco - 28th September 2013, Recife
tati_alchueyr.__doc__
● computer engineer by
UNICAMP
● senior software engineer
at Globo.com
● open source enthusiastic
● pythonist since 2003
#opensource #python #android #arduino
Packaging overview
Code Package Package
Server
Code
# life.py
def cleanup_house(address):
# ....
def walk_dog(dog_name):
# …
class Man(object):
__doc__ = “”
Package
# world.py
from life import Man
Package Server
https://pypi.python.org/
Packaging overview
Code Package Package
Server
Packaging creation
pack upload
Packaging creation
pack
# setup.py
(...)
$ python setup.py sdist
Packaging creation upload
# ~/.pypirc
[company]
username: Andreia
password: pwd
repository: http://pypi.company.com
$ python setup.py sdist upload -r company
Packaging usage
search &
download
use
Packaging usage search &
download
use
$ easy_install life
# something.py
from life import Man
Package
way to make the code available so developers
can use it
Package
setup.py
- contains lots of
metadata
- dependencies
- paths
Packages server: Cheese Shop
place where
developers can:
● find packages
● download packages
● upload packages
Brief on Python packaging history
● distutils
○ no dependecy management
○ problems between cross-platforms
○ no consistent way to reproduce an installation
○ not all metadata was handled
● setuptools: built on top of distutils
○ introduces easy_install
○ no way to uninstall installed packages
○ provides dependencies management
○ introduced eggs (similar to zip files)
● distribute: fork of setuptools
○ fork of setuptools
● distutils2 (discontinued?)
○ standard versioning (major.minor.micro)
○ setup.cfg: pulls metadata from setup.py file, without needing to run setup.py
○ which operating system requires which dependecy
pysetup: their interations easyinstall and setuptools with disutils- extract stuff from setup.
py
Distutils
● Started by Distutils SIG (Greg Ward)
● Added to stand lib in Python 1.6 (2000)
● solves
○ issues a variety of commands through setup.py
(crete tarball, install your project, compiling C
extensions of your python code)
● problems
○ no dependency management
○ problems between OS
○ no consistent way to reproduce an installation
○ not all metadata was handled
Brief on Python packaging history
PEP 386: changing the version comparison
modules
PEP 376: database of installed python
distributions
PEP 345: metadata for python software
packages 1.2
Chronology of Packaging by Ziade
http://ziade.org/2012/11/17/chronology-of-packaging/
Chronology of Packaging by Ziade
http://ziade.org/2012/11/17/chronology-of-packaging/
Brief on Python packaging history
old busted new hawtness
setuptools -> distribute
easy_install -> pip
system python -> virtual-env
Virtualenv
“virtualenv is a tool to create isolated Python
environments.”
https://pypi.python.org/pypi/virtualenv
VirtualenvWrapper
“virtualenvwrapper is a set of extensions to Ian
Bicking's virtualenv tool” -- Doug Hellmann
https://pypi.python.org/pypi/virtualenvwrapper
$ mkvirtualenv <name>
--python=
--no-site-packages=
--system-site-packages=
$ rmvirtualenv
$VIRTUALENVWRAPPER_HOOK_DIR/initialize
Pip
A tool for installing and managing Python
packages.
http://www.pip-installer.org/en/latest/index.html
$ pip search numpy
$ pip help
$ pip install flask
$ pip uninstall django
$ pip freeze
--no-deps
--extra-index-url --index-url
--download-cache --proxy --no-install
git / egg / ...
pip install -r requirements.txt
Pip
(...)
“This allows users to be in control of
specifying an environment of packages that are
known to work together.”
(...)
http://www.pip-installer.org/en/latest/cookbook.html
How Pip deals with dependency
inconsistencies?
Pip install -r requirements.txt
B
A
# requirements.txt
B
C
# B/setup.py
A==1.0.0
# C/setup.py
A>=2.0.0 C
what version of A is
installed?
$ pip install -r
requirements.txt
Pip install -r requirements.txt
# requirements.txt
B
C
# B/setup.py
A==1.0.0
# C/setup.py
A>=2.0.0
$ pip freeze
A==1.0.0
B==1.0.0
C==1.00.
B
A
C
Pip install -r requirements.txt
# requirements.txt
C
B
# B/setup.py
A==1.0.0
# C/setup.py
A>=2.0.0
what happens? error?
$ pip install -r
requirements.txt
B
A
C
Pip install -r requirements.txt
# requirements.txt
C
B
# B/setup.py
A==1.0.0
# C/setup.py
A>=2.0.0
$ pip freeze
A==2.0.0
B==1.0.0
C==1.00.
B
A
C
Pip install -r requirements.txt
# requirements.txt
C
B
A==1.5.0
# B/setup.py
A==1.0.0
# C/setup.py
A>=2.0.0
what happens? error?
$ pip install -r
requirements.txt
B
A
C
Pip install -r requirements.txt
# requirements.txt
C
B
A==1.5.0
# B/setup.py
A==1.0.0
# C/setup.py
A>=2.0.0
$ pip freeze
A==1.5.0
B==1.0.0
C==1.00.
B
A
C
Explanation
Considering pip 1.5.4:
● pip doesn’t identify conflicts of interest
between dependency packages
● why?
○ pip solves dependencies analyzing them in a list
○ it only concerns in solving the dependencies of the
package being analyzed at that moment
○ the last package dependencies prevail
provided a package at pypi, how do I
know its dependencies?
provided a package at pypi, how do I
know its dependencies?
manually looking to them
dependencies of a package
if you install a package, you can use:
$ pip show C
To show dependencies, but they don’t contain
versions - only packages names
use pipdeptree
$ pip freeze
A==1.0.0
B==1.0.0
C==1.0.0
$ pipdeptree
Warning!!! Possible confusing dependencies found:
* B==1.0.0 -> A [required: ==1.0.0, installed: 1.0.0]
C==1.0.0 -> A [required: >=2.0.0, installed: 1.0.0]
------------------------------------------------------------------------
wsgiref==0.1.2
B==1.0.0
- A [required: ==1.0.0, installed: 1.0.0]
C==1.0.0
- A [required: >=2.0.0, installed: 1.0.0]
Does the requirements.txt assure
your environment will be reproduced
always the same?
Does the requirements.txt assure
your environment will be reproduced
always the same?
not necessarily
requirements.txt
if you want to assert the same behavior in all
installations:
● don’t use >=, <=, >, <
● pin all dependencies (even deps of deps)
● pin exactly (==)
some extra notes
Have your own pypi / proxy
old versions might be removed from remote
repositories
the repository might be down during a deploy,
and can crash your application
Have your own pypi / proxy
Have your own pypi / proxy
host a PyPI mirror (bandersnatch, pep381client)
host a PyPI cache (devp)
PyPI server implementations:
● resilient (devpi)
● AWS S3 PyPI server (pypicloud)
● minimalistic PyPI (pypiserver)
● PyPI written in Django (chishop, djangopypi)
Many others..!
At globo.com we have both a PyPI server and a PyPI cache
proxy.
dumb ways to manage your
dependencies….
Python packaging and dependency resolution
1. understand the tools you use to
manage dependencies
2. keep your dependencies up to date,
but take care with >= / >
3. take care of your cheese-shop
use pipdeptree package!
thanks!
slideshare: @alchueyr
questions?
Tatiana Al-Chueyr Martins
@tati_alchueyr
last note
http://pypi-ranking.info/author

More Related Content

PDF
Current State of Python Packaging
PDF
Arbeiten mit distribute, pip und virtualenv
PPTX
Webinar - Managing Files with Puppet
PDF
Puppet Camp Phoenix 2015: Managing Files via Puppet: Let Me Count The Ways (B...
PDF
Arbeiten mit distribute, pip und virtualenv
PDF
PuppetDB: New Adventures in Higher-Order Automation - PuppetConf 2013
PDF
Pipfile, pipenv, pip… what?!
PDF
Isolated development in python
Current State of Python Packaging
Arbeiten mit distribute, pip und virtualenv
Webinar - Managing Files with Puppet
Puppet Camp Phoenix 2015: Managing Files via Puppet: Let Me Count The Ways (B...
Arbeiten mit distribute, pip und virtualenv
PuppetDB: New Adventures in Higher-Order Automation - PuppetConf 2013
Pipfile, pipenv, pip… what?!
Isolated development in python

What's hot (19)

PDF
Puppet modules for Fun and Profit
PPTX
Linux
PDF
Paver: the build tool you missed
PPTX
2015 bioinformatics bio_python
PDF
Py conkr 20150829_docker-python
PPTX
Packaging and distributing python code to Pypi
PDF
rake puppetexpert:create - Puppet Camp Silicon Valley 2014
PDF
Julia 0.5 and TensorFlow
PDF
Rust + python: lessons learnt from building a toy filesystem
PPT
Empacotamento e backport de aplicações em debian
PPT
Happy porting x86 application to android
PDF
Puppet: From 0 to 100 in 30 minutes
PDF
Writing Swift code with great testability
PDF
Anatomy of a reusable module
PDF
Using Python Packages - An Overview
PDF
Python on a chip
PDF
An introduction to cgroups and cgroupspy
PDF
PuppetCamp SEA 1 - Version Control with Puppet
PDF
PuppetCamp SEA 1 - Use of Puppet
Puppet modules for Fun and Profit
Linux
Paver: the build tool you missed
2015 bioinformatics bio_python
Py conkr 20150829_docker-python
Packaging and distributing python code to Pypi
rake puppetexpert:create - Puppet Camp Silicon Valley 2014
Julia 0.5 and TensorFlow
Rust + python: lessons learnt from building a toy filesystem
Empacotamento e backport de aplicações em debian
Happy porting x86 application to android
Puppet: From 0 to 100 in 30 minutes
Writing Swift code with great testability
Anatomy of a reusable module
Using Python Packages - An Overview
Python on a chip
An introduction to cgroups and cgroupspy
PuppetCamp SEA 1 - Version Control with Puppet
PuppetCamp SEA 1 - Use of Puppet
Ad

Viewers also liked (20)

PDF
Linking the world with Python and Semantics
PDF
Automatic English text correction
PDF
Bento lunch talk
PDF
We Buy Cheese in a Cheese Shop
PDF
How to Write a Popular Python Library by Accident
PPTX
Python, Development Environment for Windows
PDF
Python Recipes for django girls seoul
PDF
PythonBrasil[8] closing
PDF
Django - The Web framework for perfectionists with deadlines
KEY
Overview of Testing Talks at Pycon
PDF
EuroDjangoCon 2009 - Ein Rückblick
PPTX
2016 py con2016_lightingtalk_php to python
PDF
Django - The Web framework for perfectionists with deadlines
PPT
Digesting jQuery
PPTX
Super Advanced Python –act1
ODP
Rabbitmq & Postgresql
PDF
Django mongodb -djangoday_
PDF
Django e il Rap Elia Contini
PDF
PyClab.__init__(self)
PDF
2 × 3 = 6
Linking the world with Python and Semantics
Automatic English text correction
Bento lunch talk
We Buy Cheese in a Cheese Shop
How to Write a Popular Python Library by Accident
Python, Development Environment for Windows
Python Recipes for django girls seoul
PythonBrasil[8] closing
Django - The Web framework for perfectionists with deadlines
Overview of Testing Talks at Pycon
EuroDjangoCon 2009 - Ein Rückblick
2016 py con2016_lightingtalk_php to python
Django - The Web framework for perfectionists with deadlines
Digesting jQuery
Super Advanced Python –act1
Rabbitmq & Postgresql
Django mongodb -djangoday_
Django e il Rap Elia Contini
PyClab.__init__(self)
2 × 3 = 6
Ad

Similar to Python packaging and dependency resolution (20)

PDF
Virtualenv
PDF
Christian Strappazzon - Presentazione Python Milano - Codemotion Milano 2017
PPT
Python virtualenv & pip in 90 minutes
PPTX
First python project
PDF
Python+gradle
ODP
5 minute intro to virtualenv
PDF
Princeton RSE: Building Python Packages (+binary)
PDF
Django district pip, virtualenv, virtualenv wrapper & more
KEY
Ruby and Rails Packaging to Production
PDF
Welcome to the Cheese Shop: setuptools, virtualenv and PyPUG
PDF
Docker for data science
KEY
Python environments
PDF
Conda: A Cross-Platform Package Manager for Any Binary Distribution (SciPy 2014)
PDF
Packaging in packaging: dh-virtualenv
PDF
PyCon 2013 : Scripting to PyPi to GitHub and More
ODP
Virtualenv
PDF
Python Dependency Management - PyconDE 2018
PDF
OpenStack for Centos
PDF
Open erp on ubuntu
PDF
Using the "pip" package manager for Odoo/OpenERP - Opendays 2014
Virtualenv
Christian Strappazzon - Presentazione Python Milano - Codemotion Milano 2017
Python virtualenv & pip in 90 minutes
First python project
Python+gradle
5 minute intro to virtualenv
Princeton RSE: Building Python Packages (+binary)
Django district pip, virtualenv, virtualenv wrapper & more
Ruby and Rails Packaging to Production
Welcome to the Cheese Shop: setuptools, virtualenv and PyPUG
Docker for data science
Python environments
Conda: A Cross-Platform Package Manager for Any Binary Distribution (SciPy 2014)
Packaging in packaging: dh-virtualenv
PyCon 2013 : Scripting to PyPi to GitHub and More
Virtualenv
Python Dependency Management - PyconDE 2018
OpenStack for Centos
Open erp on ubuntu
Using the "pip" package manager for Odoo/OpenERP - Opendays 2014

More from Tatiana Al-Chueyr (20)

PDF
PyData London - Scaling AI workloads with Ray & Airflow.pdf
PDF
dbt no Airflow: Como melhorar o seu deploy (de forma correta)
PDF
Integrating dbt with Airflow - Overcoming Performance Hurdles
PDF
Best Practices for Effectively Running dbt in Airflow
PDF
Integrating ChatGPT with Apache Airflow
PDF
Contributing to Apache Airflow
PDF
From an idea to production: building a recommender for BBC Sounds
PDF
Precomputing recommendations with Apache Beam
PDF
Scaling machine learning to millions of users with Apache Beam
PDF
Clearing Airflow Obstructions
PPTX
Scaling machine learning workflows with Apache Beam
PDF
Responsible machine learning at the BBC
PDF
Powering machine learning workflows with Apache Airflow and Python
PPTX
Responsible Machine Learning at the BBC
PDF
PyConUK 2018 - Journey from HTTP to gRPC
PDF
Sprint cPython at Globo.com
PDF
PythonBrasil[8] - CPython for dummies
PDF
QCon SP - recommended for you
PDF
Crafting APIs
PDF
PyConUK 2016 - Writing English Right
PyData London - Scaling AI workloads with Ray & Airflow.pdf
dbt no Airflow: Como melhorar o seu deploy (de forma correta)
Integrating dbt with Airflow - Overcoming Performance Hurdles
Best Practices for Effectively Running dbt in Airflow
Integrating ChatGPT with Apache Airflow
Contributing to Apache Airflow
From an idea to production: building a recommender for BBC Sounds
Precomputing recommendations with Apache Beam
Scaling machine learning to millions of users with Apache Beam
Clearing Airflow Obstructions
Scaling machine learning workflows with Apache Beam
Responsible machine learning at the BBC
Powering machine learning workflows with Apache Airflow and Python
Responsible Machine Learning at the BBC
PyConUK 2018 - Journey from HTTP to gRPC
Sprint cPython at Globo.com
PythonBrasil[8] - CPython for dummies
QCon SP - recommended for you
Crafting APIs
PyConUK 2016 - Writing English Right

Recently uploaded (20)

PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Approach and Philosophy of On baking technology
PPTX
Machine Learning_overview_presentation.pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
A Presentation on Artificial Intelligence
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Machine learning based COVID-19 study performance prediction
PDF
cuic standard and advanced reporting.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Chapter 3 Spatial Domain Image Processing.pdf
Approach and Philosophy of On baking technology
Machine Learning_overview_presentation.pptx
MIND Revenue Release Quarter 2 2025 Press Release
A Presentation on Artificial Intelligence
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
The Rise and Fall of 3GPP – Time for a Sabbatical?
Spectral efficient network and resource selection model in 5G networks
Digital-Transformation-Roadmap-for-Companies.pptx
NewMind AI Weekly Chronicles - August'25-Week II
Programs and apps: productivity, graphics, security and other tools
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Assigned Numbers - 2025 - Bluetooth® Document
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Machine learning based COVID-19 study performance prediction
cuic standard and advanced reporting.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf

Python packaging and dependency resolution

  • 1. Python Packaging and how to improve dependency resolution Tatiana Al-Chueyr Martins @tati_alchueyr PythonDay Pernambuco - 28th September 2013, Recife
  • 2. tati_alchueyr.__doc__ ● computer engineer by UNICAMP ● senior software engineer at Globo.com ● open source enthusiastic ● pythonist since 2003 #opensource #python #android #arduino
  • 4. Code # life.py def cleanup_house(address): # .... def walk_dog(dog_name): # … class Man(object): __doc__ = “”
  • 10. Packaging creation upload # ~/.pypirc [company] username: Andreia password: pwd repository: http://pypi.company.com $ python setup.py sdist upload -r company
  • 12. Packaging usage search & download use $ easy_install life # something.py from life import Man
  • 13. Package way to make the code available so developers can use it
  • 14. Package setup.py - contains lots of metadata - dependencies - paths
  • 15. Packages server: Cheese Shop place where developers can: ● find packages ● download packages ● upload packages
  • 16. Brief on Python packaging history ● distutils ○ no dependecy management ○ problems between cross-platforms ○ no consistent way to reproduce an installation ○ not all metadata was handled ● setuptools: built on top of distutils ○ introduces easy_install ○ no way to uninstall installed packages ○ provides dependencies management ○ introduced eggs (similar to zip files) ● distribute: fork of setuptools ○ fork of setuptools ● distutils2 (discontinued?) ○ standard versioning (major.minor.micro) ○ setup.cfg: pulls metadata from setup.py file, without needing to run setup.py ○ which operating system requires which dependecy pysetup: their interations easyinstall and setuptools with disutils- extract stuff from setup. py
  • 17. Distutils ● Started by Distutils SIG (Greg Ward) ● Added to stand lib in Python 1.6 (2000) ● solves ○ issues a variety of commands through setup.py (crete tarball, install your project, compiling C extensions of your python code) ● problems ○ no dependency management ○ problems between OS ○ no consistent way to reproduce an installation ○ not all metadata was handled
  • 18. Brief on Python packaging history PEP 386: changing the version comparison modules PEP 376: database of installed python distributions PEP 345: metadata for python software packages 1.2
  • 19. Chronology of Packaging by Ziade http://ziade.org/2012/11/17/chronology-of-packaging/
  • 20. Chronology of Packaging by Ziade http://ziade.org/2012/11/17/chronology-of-packaging/
  • 21. Brief on Python packaging history old busted new hawtness setuptools -> distribute easy_install -> pip system python -> virtual-env
  • 22. Virtualenv “virtualenv is a tool to create isolated Python environments.” https://pypi.python.org/pypi/virtualenv
  • 23. VirtualenvWrapper “virtualenvwrapper is a set of extensions to Ian Bicking's virtualenv tool” -- Doug Hellmann https://pypi.python.org/pypi/virtualenvwrapper $ mkvirtualenv <name> --python= --no-site-packages= --system-site-packages= $ rmvirtualenv $VIRTUALENVWRAPPER_HOOK_DIR/initialize
  • 24. Pip A tool for installing and managing Python packages. http://www.pip-installer.org/en/latest/index.html $ pip search numpy $ pip help $ pip install flask $ pip uninstall django $ pip freeze --no-deps --extra-index-url --index-url --download-cache --proxy --no-install git / egg / ... pip install -r requirements.txt
  • 25. Pip (...) “This allows users to be in control of specifying an environment of packages that are known to work together.” (...) http://www.pip-installer.org/en/latest/cookbook.html
  • 26. How Pip deals with dependency inconsistencies?
  • 27. Pip install -r requirements.txt B A # requirements.txt B C # B/setup.py A==1.0.0 # C/setup.py A>=2.0.0 C what version of A is installed? $ pip install -r requirements.txt
  • 28. Pip install -r requirements.txt # requirements.txt B C # B/setup.py A==1.0.0 # C/setup.py A>=2.0.0 $ pip freeze A==1.0.0 B==1.0.0 C==1.00. B A C
  • 29. Pip install -r requirements.txt # requirements.txt C B # B/setup.py A==1.0.0 # C/setup.py A>=2.0.0 what happens? error? $ pip install -r requirements.txt B A C
  • 30. Pip install -r requirements.txt # requirements.txt C B # B/setup.py A==1.0.0 # C/setup.py A>=2.0.0 $ pip freeze A==2.0.0 B==1.0.0 C==1.00. B A C
  • 31. Pip install -r requirements.txt # requirements.txt C B A==1.5.0 # B/setup.py A==1.0.0 # C/setup.py A>=2.0.0 what happens? error? $ pip install -r requirements.txt B A C
  • 32. Pip install -r requirements.txt # requirements.txt C B A==1.5.0 # B/setup.py A==1.0.0 # C/setup.py A>=2.0.0 $ pip freeze A==1.5.0 B==1.0.0 C==1.00. B A C
  • 33. Explanation Considering pip 1.5.4: ● pip doesn’t identify conflicts of interest between dependency packages ● why? ○ pip solves dependencies analyzing them in a list ○ it only concerns in solving the dependencies of the package being analyzed at that moment ○ the last package dependencies prevail
  • 34. provided a package at pypi, how do I know its dependencies?
  • 35. provided a package at pypi, how do I know its dependencies? manually looking to them
  • 36. dependencies of a package if you install a package, you can use: $ pip show C To show dependencies, but they don’t contain versions - only packages names
  • 37. use pipdeptree $ pip freeze A==1.0.0 B==1.0.0 C==1.0.0 $ pipdeptree Warning!!! Possible confusing dependencies found: * B==1.0.0 -> A [required: ==1.0.0, installed: 1.0.0] C==1.0.0 -> A [required: >=2.0.0, installed: 1.0.0] ------------------------------------------------------------------------ wsgiref==0.1.2 B==1.0.0 - A [required: ==1.0.0, installed: 1.0.0] C==1.0.0 - A [required: >=2.0.0, installed: 1.0.0]
  • 38. Does the requirements.txt assure your environment will be reproduced always the same?
  • 39. Does the requirements.txt assure your environment will be reproduced always the same? not necessarily
  • 40. requirements.txt if you want to assert the same behavior in all installations: ● don’t use >=, <=, >, < ● pin all dependencies (even deps of deps) ● pin exactly (==)
  • 42. Have your own pypi / proxy old versions might be removed from remote repositories the repository might be down during a deploy, and can crash your application
  • 43. Have your own pypi / proxy
  • 44. Have your own pypi / proxy host a PyPI mirror (bandersnatch, pep381client) host a PyPI cache (devp) PyPI server implementations: ● resilient (devpi) ● AWS S3 PyPI server (pypicloud) ● minimalistic PyPI (pypiserver) ● PyPI written in Django (chishop, djangopypi) Many others..! At globo.com we have both a PyPI server and a PyPI cache proxy.
  • 45. dumb ways to manage your dependencies….
  • 47. 1. understand the tools you use to manage dependencies 2. keep your dependencies up to date, but take care with >= / > 3. take care of your cheese-shop