Fix tox build errors
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 1139fc4..d243ef6 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -9,385 +9,81 @@
   # This file is automatically generated by ../rebuild-circleci-yaml
   # !!! WARNING !!!
 
-  test-py27-nose:
+  test-pypy3-nose:
     docker:
-      - image: python:2.7
+      - image: pypy:3
     steps:
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
-          command: tox -e py27-nose
+          command: tox -e pypy3-nose
   
   # !!! WARNING !!!
   # This file is automatically generated by ../rebuild-circleci-yaml
   # !!! WARNING !!!
 
-  test-py27-nose2:
+  test-pypy3-nose2:
     docker:
-      - image: python:2.7
+      - image: pypy:3
     steps:
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
-          command: tox -e py27-nose2
+          command: tox -e pypy3-nose2
   
   # !!! WARNING !!!
   # This file is automatically generated by ../rebuild-circleci-yaml
   # !!! WARNING !!!
 
-  test-py27-pytest2:
+  test-pypy3-pytest3:
     docker:
-      - image: python:2.7
+      - image: pypy:3
     steps:
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
-          command: tox -e py27-pytest2
+          command: tox -e pypy3-pytest3
   
   # !!! WARNING !!!
   # This file is automatically generated by ../rebuild-circleci-yaml
   # !!! WARNING !!!
 
-  test-py27-pytest3:
+  test-pypy3-unit:
     docker:
-      - image: python:2.7
+      - image: pypy:3
     steps:
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
-          command: tox -e py27-pytest3
+          command: tox -e pypy3-unit
   
   # !!! WARNING !!!
   # This file is automatically generated by ../rebuild-circleci-yaml
   # !!! WARNING !!!
 
-  test-py27-unit:
+  test-pypy3-unit2:
     docker:
-      - image: python:2.7
+      - image: pypy:3
     steps:
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
-          command: tox -e py27-unit
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py27-unit2:
-    docker:
-      - image: python:2.7
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py27-unit2
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py35-nose:
-    docker:
-      - image: python:3.5
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py35-nose
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py35-nose2:
-    docker:
-      - image: python:3.5
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py35-nose2
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py35-pytest2:
-    docker:
-      - image: python:3.5
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py35-pytest2
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py35-pytest3:
-    docker:
-      - image: python:3.5
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py35-pytest3
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py35-unit:
-    docker:
-      - image: python:3.5
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py35-unit
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py35-unit2:
-    docker:
-      - image: python:3.5
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py35-unit2
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py36-nose:
-    docker:
-      - image: python:3.6
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py36-nose
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py36-nose2:
-    docker:
-      - image: python:3.6
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py36-nose2
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py36-pytest2:
-    docker:
-      - image: python:3.6
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py36-pytest2
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py36-pytest3:
-    docker:
-      - image: python:3.6
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py36-pytest3
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py36-unit:
-    docker:
-      - image: python:3.6
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py36-unit
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-py36-unit2:
-    docker:
-      - image: python:3.6
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e py36-unit2
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-pypy-nose:
-    docker:
-      - image: pypy:2
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e pypy-nose
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-pypy-nose2:
-    docker:
-      - image: pypy:2
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e pypy-nose2
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-pypy-pytest2:
-    docker:
-      - image: pypy:2
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e pypy-pytest2
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-pypy-pytest3:
-    docker:
-      - image: pypy:2
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e pypy-pytest3
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-pypy-unit:
-    docker:
-      - image: pypy:2
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e pypy-unit
-  
-  # !!! WARNING !!!
-  # This file is automatically generated by ../rebuild-circleci-yaml
-  # !!! WARNING !!!
-
-  test-pypy-unit2:
-    docker:
-      - image: pypy:2
-    steps:
-      - checkout
-      - run:
-          name: install tox
-          command: pip install tox==3.7.0
-      - run:
-          name: run tests
-          command: tox -e pypy-unit2
+          command: tox -e pypy3-unit2
   
   # !!! WARNING !!!
   # This file is automatically generated by ../rebuild-circleci-yaml
@@ -400,7 +96,7 @@
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py37-nose
@@ -416,7 +112,7 @@
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py37-nose2
@@ -432,7 +128,7 @@
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py37-pytest3
@@ -448,7 +144,7 @@
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py37-unit
@@ -464,7 +160,7 @@
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py37-unit2
@@ -480,7 +176,7 @@
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py38-nose
@@ -496,7 +192,7 @@
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py38-nose2
@@ -512,7 +208,7 @@
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py38-pytest3
@@ -528,7 +224,7 @@
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py38-unit
@@ -544,7 +240,7 @@
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py38-unit2
@@ -555,12 +251,12 @@
 
   test-py39-nose:
     docker:
-      - image: python:3.9-rc
+      - image: python:3.9
     steps:
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py39-nose
@@ -571,12 +267,12 @@
 
   test-py39-nose2:
     docker:
-      - image: python:3.9-rc
+      - image: python:3.9
     steps:
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py39-nose2
@@ -587,12 +283,12 @@
 
   test-py39-pytest3:
     docker:
-      - image: python:3.9-rc
+      - image: python:3.9
     steps:
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py39-pytest3
@@ -603,12 +299,12 @@
 
   test-py39-unit:
     docker:
-      - image: python:3.9-rc
+      - image: python:3.9
     steps:
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py39-unit
@@ -619,44 +315,89 @@
 
   test-py39-unit2:
     docker:
-      - image: python:3.9-rc
+      - image: python:3.9
     steps:
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e py39-unit2
   
+  # !!! WARNING !!!
+  # This file is automatically generated by ../rebuild-circleci-yaml
+  # !!! WARNING !!!
+
+  test-py310-unit:
+    docker:
+      - image: python:3.10
+    steps:
+      - checkout
+      - run:
+          name: install tox
+          command: pip install tox
+      - run:
+          name: run tests
+          command: tox -e py310-unit
+  
+  # !!! WARNING !!!
+  # This file is automatically generated by ../rebuild-circleci-yaml
+  # !!! WARNING !!!
+
+  test-py310-nose2:
+    docker:
+      - image: python:3.10
+    steps:
+      - checkout
+      - run:
+          name: install tox
+          command: pip install tox
+      - run:
+          name: run tests
+          command: tox -e py310-nose2
+  
+  # !!! WARNING !!!
+  # This file is automatically generated by ../rebuild-circleci-yaml
+  # !!! WARNING !!!
+
+  test-py311-unit:
+    docker:
+      - image: python:3.11
+    steps:
+      - checkout
+      - run:
+          name: install tox
+          command: pip install tox
+      - run:
+          name: run tests
+          command: tox -e py311-unit
+  
+  # !!! WARNING !!!
+  # This file is automatically generated by ../rebuild-circleci-yaml
+  # !!! WARNING !!!
+
+  test-py311-nose2:
+    docker:
+      - image: python:3.11
+    steps:
+      - checkout
+      - run:
+          name: install tox
+          command: pip install tox
+      - run:
+          name: run tests
+          command: tox -e py311-nose2
+  
 
 workflows:
   main:
     jobs:
-      - test-py27-nose
-      - test-py27-nose2
-      - test-py27-pytest2
-      - test-py27-pytest3
-      - test-py27-unit
-      - test-py27-unit2
-      - test-py35-nose
-      - test-py35-nose2
-      - test-py35-pytest2
-      - test-py35-pytest3
-      - test-py35-unit
-      - test-py35-unit2
-      - test-py36-nose
-      - test-py36-nose2
-      - test-py36-pytest2
-      - test-py36-pytest3
-      - test-py36-unit
-      - test-py36-unit2
-      - test-pypy-nose
-      - test-pypy-nose2
-      - test-pypy-pytest2
-      - test-pypy-pytest3
-      - test-pypy-unit
-      - test-pypy-unit2
+      - test-pypy3-nose
+      - test-pypy3-nose2
+      - test-pypy3-pytest3
+      - test-pypy3-unit
+      - test-pypy3-unit2
       - test-py37-nose
       - test-py37-nose2
       - test-py37-pytest3
@@ -672,6 +413,10 @@
       - test-py39-pytest3
       - test-py39-unit
       - test-py39-unit2
+      - test-py310-unit
+      - test-py310-nose2
+      - test-py311-unit
+      - test-py311-nose2
       # !!! WARNING !!!
 # This file is automatically generated by ../rebuild-circleci-yaml
 # !!! WARNING !!!
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index d0531b9..9da1624 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,5 +20,5 @@
 .tox
 build/
 .cache/
-
-\.idea/
+.vscode/
+.idea/
diff --git a/rebuild-circleci-yaml b/rebuild-circleci-yaml
index 5f5224b..1e7694e 100755
--- a/rebuild-circleci-yaml
+++ b/rebuild-circleci-yaml
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 """
 Rebuilds the .circleci/config.yml file based on the output of ``tox --listenvs``
@@ -21,8 +21,8 @@
 
   test-{{ tox_env }}:
     docker:
-      {% if python_ver == "pypy" -%}
-      - image: pypy:2
+      {% if python_ver == "pypy3" -%}
+      - image: pypy:3
       {%- else -%}
       - image: python:{{ python_ver }}
       {%- endif %}
@@ -30,7 +30,7 @@
       - checkout
       - run:
           name: install tox
-          command: pip install tox==3.7.0
+          command: pip install tox
       - run:
           name: run tests
           command: tox -e {{ tox_env }}
@@ -48,7 +48,7 @@
 # !!! WARNING !!!
 """)
 
-# Maps tox python versions (ex, "py27") to Travis Python versions (ex, "2.7")
+# Maps tox python versions (ex, "py27") to CircleCI Python versions (ex, "2.7")
 py_version_map = {
     "py26": "2.6",
     "py27": "2.7",
@@ -56,14 +56,17 @@
     "py36": "3.6",
     "py37": "3.7",
     "py38": "3.8",
-    "py39": "3.9-rc",
-    "pypy": "pypy",
+    "py39": "3.9",
+    "py310": "3.10",
+    "py311": "3.11",
+    "pypy3": "pypy3",
 }
 
 def main():
-    env_list_str = sp.check_output("tox --listenvs", shell=True).splitlines()
+    env_list_bytes = sp.check_output("tox --listenvs", shell=True).splitlines()
     env_list = []
-    for env in env_list_str:
+    for env_bytes in env_list_bytes:
+        env = env_bytes.decode("utf-8")
         if not env.strip():
             continue
         py_ver, _, _ = env.partition("-")
diff --git a/tox.ini b/tox.ini
index 7ed1255..f109b95 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,7 @@
 [tox]
-envlist=py{27,35,36,py}-{nose,nose2,pytest2,pytest3,unit,unit2},py{37,38,39,310,311}-{nose,nose2,pytest3,unit,unit2}
+# NOTE: when adding Python versions, also update and re-run `./rebuild-circleci-yaml`
+envlist=pypy3-{nose,nose2,pytest3,unit,unit2},py{37,38,39}-{nose,nose2,pytest3,unit,unit2},py{310,311}-{unit,nose2}
+
 [testenv]
 deps=
     nose
@@ -16,4 +18,4 @@
     pytest3: py.test parameterized/test.py
     #pytest4: py.test parameterized/test.py
     unit: python -m unittest parameterized.test
-    unit2: unit2 parameterized.test
+    unit2: unit2 parameterized.test
\ No newline at end of file