Seth Larson of the Python Software Foundation has advised against automatically raising the minimum version of a dependency in a library’s metadata when a vulnerability is found. He argues that such metadata should describe only compatibility, leaving security control of the final build to the application.
The discussion began after a proposed pull request for an example library changed its urllib3 requirement from urllib3>=2 to urllib3>=2.6.3 following disclosure of a vulnerability affecting versions up to 2.6.2. Larson maintains that dependency ranges exist to express compatibility, not to enforce security fixes that the library does not ship itself.
According to the article, adopting this practice at scale would create unsustainable workload. More than 10,000 packages on the Python Package Index list urllib3 as a direct dependency. Similar numbers apply to numpy (approximately 80,000 dependents), requests (72,000), and pandas (55,000). Releasing new versions of every affected project after each published CVE would be impractical.
The recommended approach places responsibility on application owners. They should maintain a lockfile (requirements.txt with hashes, pylock.toml, or uv.lock) that records exact versions used in a build. Tools such as pip-audit or composition analysis solutions can then compare the resolved dependency graph against known vulnerabilities.
Exceptions are acknowledged. When a security fix removes functionality or breaks backward compatibility, adjusting the allowed range may be justified. Likewise, if an existing constraint prevents users from reaching a patched version, maintainers should consider widening or shifting the range to enable the secure update.
CodeScoring concludes that version bounds may reflect security requirements, yet they do not replace proper vulnerability management of the final product. Maintainers should publish affected and fixed version data, verify compatibility, and avoid blocking users from safe versions, while application owners retain control over the concrete dependency tree.
