I prefer to upgrade everything and fix things that break. I've always been able to easily figure out which dependency was causing the exception after upgrading all packages, so no point in upgrading them individually for me.
Also, I don't manually update my packages. My build scripts do that for me from my requirements.txt file, so it makes sense to update requirements.txt first.
The only solution I know of to this is to "unroll" all those dependencies into your own requirements.txt, and manage them the same way.
For some projects I work with this is actually the only option, since I have to use requirements files with hashes and those are all-or-nothing -- even a single dependency-of-a-dependency that doesn't specify a hash will break the install, so I have to track down all of them and get a hashed entry into my requirements file.
Seems optimizing for the happy path (nothing breaks) could save some time.
pip list --outdated | sed 's/(.*//g' | xargs pip install -U
pip freeze > requirements.txt
From http://stackoverflow.com/a/22260015/149428Another similar easy option is pip-review.
My dependency upgrade workflow for a Python web app is usually:
Perhaps this could be useful if you're using tox to test against many versions of Python, e.g. for a library.(Or if you only freeze top-level dependencies, even though that goes against best practices.)