diff --git a/python/Makefile b/python/Makefile
index 5cd7f978d4b0ce37831e4b49a2b27acdfc67aa7c..9649addc6d2d780321efbf2a9f744813032b6aea 100644
--- a/python/Makefile
+++ b/python/Makefile
@@ -41,7 +41,7 @@ pypi:
 	mkdir -p pypi
 	cp -r test pypi/
 	cp ../src/wrapper/Plumed.h README.rst MANIFEST.in cplumed.pxd plumed.pyx setup.py ../VERSION pypi/
-	cd pypi ; $(python_bin) setup.py sdist
+	cd pypi ; plumed_language_level=2 $(python_bin) setup.py sdist
 	echo "now use: $(python_bin) -m twine upload dist/plumed-$(VERSION).tar.gz"
 
 clean:
diff --git a/python/setup.py b/python/setup.py
index 45a824491fc1e2e5a3f34a74d8aed1d1998e373e..8ff2032e56c9ff52f1dc38c17076daaeb2d449e6 100644
--- a/python/setup.py
+++ b/python/setup.py
@@ -37,6 +37,15 @@ from distutils.version import LooseVersion
 def is_platform_mac():
     return sys.platform == 'darwin'
 
+language_level=os.getenv("plumed_language_level")
+if language_level is None:
+  if (sys.version_info > (3, 0)):
+      language_level=3
+  else:
+      language_level=2
+else:
+  language_level=int(language_level)
+
 if os.getenv("plumed_macports") is not None:
     copyfile("../VERSION","VERSION")
     copyfile("../src/wrapper/Plumed.h","Plumed.h")
@@ -119,7 +128,8 @@ ext_modules=[Extension(
   )]
 
 if USE_CYTHON:
-    ext_modules=cythonize(ext_modules)
+    print('using language level',language_level)
+    ext_modules=cythonize(ext_modules,language_level=language_level)
 
 setup(
   name=plumedname,