diff --git a/.zuul.yaml b/.zuul.yaml
index 3a0961091..b7d584faa 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -3,7 +3,6 @@
       - check-requirements
       - openstack-cover-jobs
       - openstack-lower-constraints-jobs
-      - openstack-python-jobs
       - openstack-python3-ussuri-jobs
       - publish-openstack-docs-pti
       - release-notes-jobs-python3
@@ -182,6 +181,7 @@
         s-proxy: false
       devstack_localrc:
         TEMPEST_PLUGINS: /opt/stack/watcher-tempest-plugin
+        USE_PYTHON3: true
       tempest_test_regex: watcher_tempest_plugin.tests.api
       tox_envlist: all
       tox_environment:
diff --git a/doc/requirements.txt b/doc/requirements.txt
index 94581c2eb..d86fbab71 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -2,7 +2,6 @@
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
 openstackdocstheme>=1.20.0 # Apache-2.0
-sphinx>=1.8.0,<2.0.0;python_version=='2.7' # BSD
 sphinx>=1.8.0,!=2.1.0;python_version>='3.4' # BSD
 sphinxcontrib-pecanwsme>=0.8.0 # Apache-2.0
 sphinxcontrib-svg2pdfconverter>=0.1.0 # BSD
diff --git a/playbooks/legacy/grenade-devstack-watcher/run.yaml b/playbooks/legacy/grenade-devstack-watcher/run.yaml
index 62eddf2bd..76717ac18 100644
--- a/playbooks/legacy/grenade-devstack-watcher/run.yaml
+++ b/playbooks/legacy/grenade-devstack-watcher/run.yaml
@@ -40,7 +40,7 @@
 
           export DEVSTACK_GATE_TEMPEST_NOTESTS=1
           export DEVSTACK_GATE_GRENADE=pullup
-
+          export DEVSTACK_GATE_USE_PYTHON3=True
           export BRANCH_OVERRIDE=default
           if [ "$BRANCH_OVERRIDE" != "default" ] ; then
               export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
diff --git a/releasenotes/notes/drop-py-2-7-54f8e806d71f19a7.yaml b/releasenotes/notes/drop-py-2-7-54f8e806d71f19a7.yaml
new file mode 100644
index 000000000..f6161c26e
--- /dev/null
+++ b/releasenotes/notes/drop-py-2-7-54f8e806d71f19a7.yaml
@@ -0,0 +1,6 @@
+---
+upgrade:
+  - |
+    Python 2.7 support has been dropped. Last release of Watcher
+    to support py2.7 is OpenStack Train. The minimum version of Python now
+    supported by Watcher is Python 3.6.
diff --git a/requirements.txt b/requirements.txt
index cc65597b4..bb10adffb 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,7 +3,6 @@
 # process, which may cause wedges in the gate later.
 
 apscheduler>=3.5.1 # MIT License
-enum34>=1.1.6;python_version=='2.7' or python_version=='2.6' or python_version=='3.3' # BSD
 jsonpatch>=1.21 # BSD
 keystoneauth1>=3.4.0 # Apache-2.0
 jsonschema>=2.6.0 # MIT
@@ -46,8 +45,6 @@ stevedore>=1.28.0 # Apache-2.0
 taskflow>=3.1.0 # Apache-2.0
 WebOb>=1.8.5 # MIT
 WSME>=0.9.2 # MIT
-# NOTE(fdegir): NetworkX 2.3 dropped support for Python 2
-networkx>=1.11,<2.3;python_version<'3.0'  # BSD
 networkx>=1.11;python_version>='3.4' # BSD
 microversion_parse>=0.2.1 # Apache-2.0
 futurist>=1.8.0 # Apache-2.0
diff --git a/setup.cfg b/setup.cfg
index e49233296..99f18f65a 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -13,8 +13,6 @@ classifier =
     License :: OSI Approved :: Apache Software License
     Operating System :: POSIX :: Linux
     Programming Language :: Python
-    Programming Language :: Python :: 2
-    Programming Language :: Python :: 2.7
     Programming Language :: Python :: 3
     Programming Language :: Python :: 3.6
     Programming Language :: Python :: 3.7
diff --git a/tox.ini b/tox.ini
index 92224c58d..bbe8a27d9 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,9 +1,10 @@
 [tox]
 minversion = 2.0
-envlist = py36,py37,py27,pep8
+envlist = py36,py37,pep8
 skipsdist = True
 
 [testenv]
+basepython = python3
 usedevelop = True
 whitelist_externals = find
                       rm
@@ -21,14 +22,12 @@ commands =
 passenv = http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY
 
 [testenv:pep8]
-basepython = python3
 commands =
     doc8 doc/source/ CONTRIBUTING.rst HACKING.rst README.rst
     flake8
     bandit -r watcher -x watcher/tests/* -n5 -ll -s B320
 
 [testenv:venv]
-basepython = python3
 setenv = PYTHONHASHSEED=0
 deps =
     -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
@@ -38,7 +37,6 @@ deps =
 commands = {posargs}
 
 [testenv:cover]
-basepython = python3
 setenv =
     PYTHON=coverage run --source watcher --parallel-mode
 commands =
@@ -49,7 +47,6 @@ commands =
     coverage report
 
 [testenv:docs]
-basepython = python3
 setenv = PYTHONHASHSEED=0
 deps = -r{toxinidir}/doc/requirements.txt
 commands =
@@ -57,7 +54,6 @@ commands =
   sphinx-build -W --keep-going -b html doc/source doc/build/html
 
 [testenv:api-ref]
-basepython = python3
 deps = -r{toxinidir}/doc/requirements.txt
 whitelist_externals = bash
 commands =
@@ -65,17 +61,14 @@ commands =
   sphinx-build -W --keep-going -b html -d api-ref/build/doctrees api-ref/source api-ref/build/html
 
 [testenv:debug]
-basepython = python3
 commands = oslo_debug_helper -t watcher/tests {posargs}
 
 [testenv:genconfig]
-basepython = python3
 sitepackages = False
 commands =
     oslo-config-generator --config-file etc/watcher/oslo-config-generator/watcher.conf
 
 [testenv:genpolicy]
-basepython = python3
 commands =
     oslopolicy-sample-generator --config-file etc/watcher/oslo-policy-generator/watcher-policy-generator.conf
 
@@ -88,7 +81,6 @@ enable-extensions = H106,H203,H904
 exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,*sqlalchemy/alembic/versions/*,demo/,releasenotes
 
 [testenv:wheel]
-basepython = python3
 commands = python setup.py bdist_wheel
 
 [hacking]
@@ -101,7 +93,6 @@ extension=.rst
 ignore-path=doc/source/image_src,doc/source/man,doc/source/api
 
 [testenv:pdf-docs]
-basepython = python3
 envdir = {toxworkdir}/docs
 deps = {[testenv:docs]deps}
 whitelist_externals =
@@ -113,17 +104,14 @@ commands =
   make -C doc/build/pdf
 
 [testenv:releasenotes]
-basepython = python3
 deps = -r{toxinidir}/doc/requirements.txt
 commands = sphinx-build -a -W -E -d releasenotes/build/doctrees --keep-going -b html releasenotes/source releasenotes/build/html
 
 [testenv:bandit]
-basepython = python3
 deps = -r{toxinidir}/test-requirements.txt
 commands = bandit -r watcher -x watcher/tests/* -n5 -ll -s B320
 
 [testenv:lower-constraints]
-basepython = python3
 deps =
   -c{toxinidir}/lower-constraints.txt
   -r{toxinidir}/test-requirements.txt