diff --git a/tox.ini b/tox.ini
index 8bb13c9b71..0cfed1712c 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,15 +1,9 @@
 [tox]
-minversion = 3.18.0
+minversion = 4.3.0
 envlist = py3,pep8
-#skipsdist = True
-# Automatic envs (pyXX) will only use the python version appropriate to that
-# env and ignore basepython inherited from [testenv] if we set
-# ignore_basepython_conflict.
-ignore_basepython_conflict = True
 
 [testenv]
-usedevelop = True
-basepython = python3
+usedevelop = true
 setenv =
     OS_STDOUT_CAPTURE=1
     OS_STDERR_CAPTURE=1
@@ -18,8 +12,8 @@ deps =
     -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
     -r{toxinidir}/test-requirements.txt
     -r{toxinidir}/requirements.txt
-commands = stestr run {posargs}
-allowlist_externals = stestr
+commands =
+    stestr run {posargs}
 
 [testenv:pep8]
 deps =
@@ -62,7 +56,6 @@ commands =
     pythom -m pip install -q -e "git+file://{toxinidir}/../openstacksdk#egg=openstacksdk"
     python -m pip freeze
     stestr run {posargs}
-allowlist_externals = stestr
 
 [testenv:functional]
 setenv =
@@ -87,10 +80,11 @@ commands =
 
 [testenv:venv]
 deps =
-  -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-  -r{toxinidir}/requirements.txt
-  -r{toxinidir}/doc/requirements.txt
-commands = {posargs}
+    -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+    -r{toxinidir}/requirements.txt
+    -r{toxinidir}/doc/requirements.txt
+commands =
+    {posargs}
 
 [testenv:cover]
 setenv =
@@ -110,23 +104,23 @@ commands =
 
 [testenv:docs]
 deps =
-  -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-  -r{toxinidir}/doc/requirements.txt
+    -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+    -r{toxinidir}/doc/requirements.txt
 commands =
-  sphinx-build -a -E -W -d doc/build/doctrees -b html doc/source doc/build/html
-  sphinx-build -a -E -W -d doc/build/doctrees -b man doc/source doc/build/man
-  # Validate redirects (must be done after the docs build
-  whereto doc/build/html/.htaccess doc/test/redirect-tests.txt
+    sphinx-build -a -E -W -d doc/build/doctrees -b html doc/source doc/build/html
+    sphinx-build -a -E -W -d doc/build/doctrees -b man doc/source doc/build/man
+    # Validate redirects (must be done after the docs build
+    whereto doc/build/html/.htaccess doc/test/redirect-tests.txt
 
 [testenv:releasenotes]
 deps =
-  -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-  -r{toxinidir}/doc/requirements.txt
+    -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+    -r{toxinidir}/doc/requirements.txt
 commands =
-  sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
+    sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
 
 [flake8]
-show-source = True
+show-source = true
 exclude = .venv,.git,.tox,dist,doc,*lib/python*,*egg,build,tools,releasenotes
 # E203 Black will put spaces after colons in list comprehensions
 # E501 Black takes care of line length for us