Another tox 4 PSA. It turns out the tox 3 was not using the command in '[tox] install_command' when installing the package under test. tox 4 does, which means overriding '[tox] install_command' to include a constraints file (-c) will prevent you installing any requirement that is listed in the upper-constraints file, even if said requirement is the thing you're currently working on. This applies to all libraries (e.g. oslo.db, python-cinderclient) but not the services (cinder, nova) since those aren't included in upper-constraints. The "correct" way to respect upper-constraints is to provide them in 'deps' alongside the requirements file(s), e.g. [testenv] deps = -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt This will cause tox to install all of the package's dependencies first *with* constraints before installing the package itself *without constraints*. There is a bug report open against pip to change this behaviour [1], but it's been sat there for over two years with no activity so I wouldn't rely on this. Stephen [1] https://github.com/pypa/pip/issues/7839