diff --git a/doc/requirements.txt b/doc/requirements.txt
new file mode 100644
index 00000000..7e68e1c7
--- /dev/null
+++ b/doc/requirements.txt
@@ -0,0 +1,10 @@
+# The order of packages is significant, because pip processes them in the order
+# of appearance. Changing the order has an impact on the overall integration
+# process, which may cause wedges in the gate later.
+
+# this is required for the docs build jobs
+sphinx!=1.6.6,>=1.6.2 # BSD
+openstackdocstheme>=1.18.1 # Apache-2.0
+reno>=2.5.0 # Apache-2.0
+sphinxmark>=0.1.14 # Apache-2.0
+doc8>=0.6.0 # Apache-2.0
diff --git a/test-requirements.txt b/test-requirements.txt
index 09d54c4a..2d59dc94 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -7,10 +7,3 @@ pyasn1!=0.2.3,>=0.1.8 # BSD
 pyOpenSSL>=16.2.0 # Apache-2.0
 requests>=2.14.2 # Apache-2.0
 ndg-httpsclient>=0.4.2;python_version<'3.0' # BSD
-
-# this is required for the docs build jobs
-sphinx!=1.6.6,>=1.6.2 # BSD
-openstackdocstheme>=1.18.1 # Apache-2.0
-doc8>=0.6.0 # Apache-2.0
-reno>=2.5.0 # Apache-2.0
-sphinxmark>=0.1.14 # Apache-2.0
diff --git a/tox.ini b/tox.ini
index 91024bd3..99f33bdb 100644
--- a/tox.ini
+++ b/tox.ini
@@ -28,10 +28,11 @@ setenv =
 
 
 [testenv:docs]
+deps = -r{toxinidir}/doc/requirements.txt
 commands=
     bash -c "rm -rf doc/build"
     doc8 doc
-    python setup.py build_sphinx
+    sphinx-build -b html doc/source doc/build/html
 
 
 [doc8]
@@ -40,6 +41,7 @@ extensions = .rst
 
 
 [testenv:releasenotes]
+deps = -r{toxinidir}/doc/requirements.txt
 commands =
     sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html