flake8-2020
flake8 plugin which checks for misuse of sys.version
or sys.version_info
this will become a problem when python3.10
or python4.0
exists (presumably
during the year 2020).
you might also find an early build of python3.10 useful
installation
pip install flake8-2020
flake8 codes
Code | Description |
---|
YTT101 | sys.version[:3] referenced (python3.10) |
YTT102 | sys.version[2] referenced (python3.10) |
YTT103 | sys.version compared to string (python3.10) |
YTT201 | sys.version_info[0] == 3 referenced (python4) |
YTT202 | six.PY3 referenced (python4) |
YTT203 | sys.version_info[1] compared to integer (python4) |
YTT204 | sys.version_info.minor compared to integer (python4) |
YTT301 | sys.version[0] referenced (python10) |
YTT302 | sys.version compared to string (python10) |
YTT303 | sys.version[:1] referenced (python10) |
rationale
lots of code incorrectly references the sys.version
and sys.version_info
members. in particular, this will cause some issues when the version of python
after python3.9 is released. my current recommendation is 3.10 since I believe
it breaks less code, here's a few patterns that will cause issues:
python_version = sys.version[:3]
py_minor = sys.version[2]
sys.version >= '3.5'
python_version = '{}.{}'.format(*sys.version_info)
py_minor = str(sys.version_info[1])
sys.version_info >= (3, 5)
is_py3 = sys.version_info[0] == 3
if six.PY3:
print('python3!')
if sys.version_info[0] >= 3 and sys.version_info[1] >= 5:
print('py35+')
if sys.version_info.major >= 3 and sys.version_info.minor >= 6:
print('py36+')
is_py3 = sys.version_info >= (3,)
if not six.PY2:
print('python3!')
if sys.version_info >= (3, 5):
print('py35+')
if sys.version_info >= (3, 6):
print('py36+')
python_major_version = sys.version[0]
if sys.version >= '3':
print('python3!')
if sys.version[:1] >= '3':
print('python3!')
python_major_version = str(sys.version_info[0])
if sys.version_info >= (3,):
print('python3!')
if sys.version_info >= (3,):
print('python3!')
as a pre-commit hook
See pre-commit for instructions
Sample .pre-commit-config.yaml
:
- repo: https://github.com/pycqa/flake8
rev: 3.7.8
hooks:
- id: flake8
additional_dependencies: [flake8-2020==1.6.1]