There’s one specific behaviour that pip has that could lead to looking like what you’re describing:
If a requirement specifier includes a pre-release or development version (e.g. >=0.0.dev0) then pip will allow pre-release and development versions for that requirement.
Going off of memory, pip uses pre-release versions for a package if:
- There are only pre-release versions for a project.
- The version specifier is a pre-release specifier.
--pre
was passed.