Last year I wrote a nifty script called Pip-Outdated.py
"Pip-Outdated.py - a script to compare requirements.in with the output of pip list --outdated". It basically runs pip list --outdated
but filters based on the packages mentioned in your requirements.in
. For people familiar with Node, it's like checking all installed packages in node_modules
if they have upgrades, but filter it down by only those mentioned in your package.json
.
I use this script often enough that I added a little interactive input to ask if it should edit requirements.in
for you for each possible upgrade. Looks like this:
❯ Pip-Outdated.py
black INSTALLED: 23.7.0 POSSIBLE: 23.9.1
click INSTALLED: 8.1.6 POSSIBLE: 8.1.7
elasticsearch-dsl INSTALLED: 7.4.1 POSSIBLE: 8.9.0
fastapi INSTALLED: 0.101.0 POSSIBLE: 0.103.1
httpx INSTALLED: 0.24.1 POSSIBLE: 0.25.0
pytest INSTALLED: 7.4.0 POSSIBLE: 7.4.2
Update black from 23.7.0 to 23.9.1? [y/N/q] y
Update click from 8.1.6 to 8.1.7? [y/N/q] y
Update elasticsearch-dsl from 7.4.1 to 8.9.0? [y/N/q] n
Update fastapi from 0.101.0 to 0.103.1? [y/N/q] n
Update httpx from 0.24.1 to 0.25.0? [y/N/q] n
Update pytest from 7.4.0 to 7.4.2? [y/N/q] y
and then,
❯ git diff requirements.in | cat
diff --git a/requirements.in b/requirements.in
index b7a246e..0e996e5 100644
--- a/requirements.in
+++ b/requirements.in
@@ -9,7 +9,7 @@ python-decouple==3.8
fastapi==0.101.0
uvicorn[standard]==0.23.2
selectolax==0.3.16
-click==8.1.6
+click==8.1.7
python-dateutil==2.8.2
gunicorn==21.2.0
# I don't think this needs `[secure]` because it's only used by
@@ -18,7 +18,7 @@ requests==2.31.0
cachetools==5.3.1
# Dev things
-black==23.7.0
+black==23.9.1
flake8==6.1.0
-pytest==7.4.0
+pytest==7.4.2
httpx==0.24.1
That's it. Then if you want to actually make these upgrades you run:
❯ pip-compile --generate-hashes requirements.in && pip install -r requirements.txt
To install it, download the script from: https://gist.github.com/peterbe/a2b158c39f1f835c0977c82befd94cdf
and put it in your ~/bin
and make it executable.
Now go into a directory that has a requirements.in
and run Pip-Outdated.py
Comments