diff --git a/test-requirements.txt b/test-requirements.txt
index f88e88f0acb7f05b1c415bf0377b6a2e2bd6649a..269d9f56642311fa1b7e3a2a2b611423fa1ef75d 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,3 +1,4 @@
+hacking>=0.10.0
 oslo.log>=1.0.0  # Apache-2.0
 oslotest>=1.5.1  # Apache-2.0
 PyYAML
diff --git a/tox.ini b/tox.ini
index f11b0890b8c96554dfe079eff306745b36fc24cd..00511c1d66f55b599aeedcee2167fe6fd0100cc7 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,27 +1,29 @@
 [tox]
 minversion = 1.6
 skipsdist = True
-envlist = functional
+envlist = functional,pep8
 
 [testenv]
-install_command = pip install {opts} {packages}
+install_command = pip install -U {opts} {packages}
+deps = -r{toxinidir}/requirements.txt
+       -r{toxinidir}/test-requirements.txt
 
 [testenv:pep8]
-deps = PyYAML
 commands =
     {toxinidir}/tools/validate-all-json.sh
     {toxinidir}/tools/validate-all-yaml.sh
     {toxinidir}/tools/validate-all-maintainer.sh
     {toxinidir}/tools/validate-links.sh
     {toxinidir}/tools/validate-min-env-vars.sh
+    flake8
 
 [testenv:validate-contents]
-deps = PyYAML
 commands =
     {toxinidir}/tools/validate-all-json.sh
     {toxinidir}/tools/validate-all-yaml.sh
     {toxinidir}/tools/validate-all-maintainer.sh
     {toxinidir}/tools/validate-links.sh
+    {toxinidir}/tools/validate-min-env-vars.sh
 
 [testenv:bashate]
 deps = bashate
@@ -35,7 +37,6 @@ whitelist_externals = bash
 commands = bash -c tests/setup_gate.sh
 
 [testenv:images]
-deps = -r{toxinidir}/test-requirements.txt
 whitelist_externals = find
                       bash
                       sudo
@@ -53,11 +54,13 @@ commands =
 # tools/test-deploy
 
 [testenv:functional]
-deps = -r{toxinidir}/requirements.txt
-       -r{toxinidir}/test-requirements.txt
 whitelist_externals = find
                       bash
 commands =
    find . -type f -name "*.pyc" -delete
    bash -c "if [ ! -d .testrepository ]; then testr init; fi"
    testr run ^(?!test_images).*
+
+[flake8]
+show-source = True
+exclude=.git,.tox,doc