NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #435 most downloaded on PyPI
passive checker of Python programs
Last release today
03 Oct 2026
Release timing varies
gaps range from 9 days to 1.3 years
Nearly every release is documented
notes for 41 of 45 stable releases
Nothing withdrawn
no release was ever pulled
18 years old
45 releases · first in 2009
Fix for lazy import of Literal considered eager
Fix for lazy import of Literal considered eager
Fix for lazy imports inside try: (not at module scope)
Fix for lazy imports inside try: (not at module scope)
One column per quarter.
Drop support for EOL python 3.9
Add support for python 3.15
Drop support for EOL python 3.9
lazy import is eagerly used at module scope
lazy from ... import * is invalid syntax
lazy from __future__ import ... is invalid syntax
lazy import must be at module scope
Handle cast(...) with named arguments
Fix duplicate errors in first argument of cast(...)
Handle TypeVar(... default='...')
Fix missing error for first argument of TypeVar(...) call
Update handling of NamedTuple(...) for python 3.15 changes
Update handling of TypedDict(...) for python 3.13 changes
Add handling of assert_type(...)
Add handling of NewType(...)
Add handling of TypeVarTuple(...)
Add handling of ParamSpec(...)
Fix assignment expressions in dictionary literals
Remove file_tokens parameter to Checker. Unused since 3.0.0
Fix false-negative for deleting special variables such as del __tracebackhide__
Add support for python3t shebangs
Remove support for obsolete python3m and pythonu shebangs
Add "t-string is missing placeholders" error
Add support for python 3.14
Add "t-string is missing placeholders" error
Fix annotation erroneously causing a name to be defined with from __future__ import annotations
Add support for always-deferred annotations (PEP 749)
Fix crash with global / nonlocal in class bodies (regressed in 3.3.0)
Fix crash with global / nonlocal in class bodies (regressed in 3.3.0)
Allow assignment expressions to redefine annotations (regressed in 3.3.0)
Allow assignment expressions to redefine annotations (regressed in 3.3.0)
Add __debuggerskip__ as a special local
Add __debuggerskip__ as a special local
Allow assignment expressions to redefine outer names
Drop support for EOL python 3.8
Add new error for unused global / nonlocal names
Add support for *T (TypeVarTuple) and P (ParamSpec) in PEP 695 annotations.
Add support for *T (TypeVarTuple) and **P (ParamSpec) in PEP 695 annotations.
Drop support for EOL python 3.6 / 3.7
Drop support for EOL python 3.6 / 3.7
Remove ContinueInFinally check (only relevant in python < 3.8)
Fix forward annotations inside a nested scope
Produce an error when a definition shadows an unused variable
Fix accessed global annotation being redefined in a local scope
Allow redefinition of functions across match arms
Fix potential None for lineno during tokenization errors
Add support for PEP 695 and python 3.12
Fix crash on augmented assign to print builtin
Fix crash on augmented assign to print builtin
Detect undefined name in variable defined by an annotated assignment
Detect undefined name in variable defined by an annotated assignment
Add a new error for names which are annotated but unused
Remove handling of python 2.x # type: comments. Use annotations instead
Drop support for EOL python 2.7 / 3.4 / 3.5
Drop support for EOL python 2.7 / 3.4 / 3.5
Ignore __all__ when not directly assigned
Handle TypeAlias annotations as aliases (PEP 613)
Assignment expressions (:=) target outer scope in comprehensions
Add support for new python 3.11 syntax
Unify output so it is always filename:lineno:col: message
Properly report SyntaxError from stdin in python < 3.9
Fix offsets of ``SyntaxError``s in pypy
Remove unused tracing code (traceTree)
Remove unused tracing code (traceTree)
Add support for match statement
Detect typing module attributes when imported with import ... as ...
Fix regression in 2.3.0: type annotations no longer redefine imports
Fix regression in 2.3.0: type annotations no longer redefine imports
Recognize tuple concatenation in __all__ export definitions
Recognize tuple concatenation in __all__ export definitions
Better support use of annotation-only assignments when using from __future__ import annotations
Recognize special-case typing for Annotated
Fix undefined name __qualname__ in class scope
Recognize special-cased typing for TypeVar
Errors for undefined exports in __all__ are shown in a deterministic order
Fix false positives in certain typing constructs (TypeVar, NamedTuple, TypedDict, cast)
Include column information in error messages
Include column information in error messages
Fix @overload detection with other decorators and in non-global scopes
Fix return-type annotation being a class member
Fix assignment to _ in doctests with existing _ name
Namespace attributes which are attached to ast nodes with _pyflakes_ to avoid conflicts with other libraries (notably bandit)
Add check for f-strings without placeholders
Add check for unused/extra/invalid 'string literal'.format(...)
Add check for unused/extra/invalid 'string literal % ...
Improve python shebang detection
Allow type ignore to be followed by a code # type: ignore[attr-defined]
Add support for assignment expressions (PEP 572)
Support @overload detection from typing_extensions as well
Fix @overload detection for async functions
Allow continue inside finally in python 3.8+
Fix handling of annotations in positional-only arguments
Make pyflakes more resistant to future syntax additions
Fix false positives in partially quoted type annotations
Warn about is comparison to tuples
Fix Checker usage with async function subtrees
Add check for if of non-empty tuple
Switch from optparse to argparse
Fix false positives in partially quoted type annotations in unusual contexts
Be more cautious when identifying Literal type expressions
Fix reported line number for type comment errors
Fix reported line number for type comment errors
Fix typing.overload check to only check imported names
Allow intentional assignment to variables named _
Allow intentional assignment to variables named _
Recognize __module__ as a valid name in class scope
pyflakes.checker.Checker supports checking of partial ast trees
Detect assign-before-use for local variables which shadow builtin names
Detect invalid print syntax using >> operator
Treat async for the same as a for loop for introducing variables
Add detection for list concatenation in __all__
Exempt @typing.overload from duplicate function declaration
Importing a submodule of an as-aliased import-import is marked as used
Report undefined names from __all__ as possibly coming from a * import
Add support for changes in Python 3.8-dev
Add support for PEP 563 (from __future__ import annotations)
Include Python version and platform information in pyflakes --version
Recognize __annotations__ as a valid magic global in Python 3.6+
Mark names used in PEP 484 # type: ... comments as used
Add check for use of is operator with str, bytes, and int literals
Drop support for EOL Python <2.7 and 3.2-3.3
Drop support for EOL Python <2.7 and 3.2-3.3
Check for unused exception binding in except: block
Handle string literal type annotations
Ignore redefinitions of _, unless originally defined by import
Support __class__ without self in Python 3
Issue an error for raise NotImplemented(...)
Process function scope variable annotations for used names
Process function scope variable annotations for used names
Find Python files without extensions by their shebang
Enable support for PEP 526 annotated assignments
Enable support for PEP 526 annotated assignments
Change formatting of ImportStarMessage to be consistent with other errors
Change formatting of ImportStarMessage to be consistent with other errors
Support PEP 498 "f-strings"
Fix PyPy2 Windows IntegrationTests
Fix PyPy2 Windows IntegrationTests
Check for duplicate dictionary keys
Fix TestMain tests on Windows
Fix "continue" and "break" checks ignoring py3.5's "async for" loop
Fix TypeError when processing relative imports
Fix TypeError when processing relative imports
Avoid traceback when exception is del-ed in except
Avoid traceback when exception is del-ed in except
Fix false RedefinedWhileUnused for submodule imports
Fix false RedefinedWhileUnused for submodule imports
Warn against reusing exception names after the except: block on Python 3
Warn against reusing exception names after the except: block on Python 3
Improve the error messages for imports
Allow main() to accept arguments.
Allow main() to accept arguments.
Support @ matrix-multiplication operator
Validate __future__ imports
Fix doctest scope testing
Warn for tuple assertions which are always true
Warn for "import *" not at module level on Python 3
Catch many more kinds of SyntaxErrors
Check PEP 498 f-strings
(and a few more sundry bugfixes)
Python 3.5 support. async/await statements in particular.
Python 3.5 support. async/await statements in particular.
Fix test_api.py on Windows.
Eliminate a false UnusedImport warning when the name has been declared "global"
Fix a traceback when a global is defined in one scope, and used in another.
Fix a traceback when a global is defined in one scope, and used in another.
Update NEWS.txt to include 0.9.0, which had been forgotten.
Update NEWS.txt to include 0.9.0, which had been forgotten.
Exit gracefully, not with a traceback, on SIGINT and SIGPIPE.
Exit gracefully, not with a traceback, on SIGINT and SIGPIPE.
Fix incorrect report of undefined name when using lambda expressions in generator expressions.
Don't crash on DOS line endings on Windows and Python 2.6.
Don't report an undefined name if the 'del' which caused a name to become undefined is only conditionally executed.
Properly handle differences in list comprehension scope in Python 3.
Improve handling of edge cases around 'global' defined variables.
Report an error for 'return' outside a function.
Detect the declared encoding in Python 3.
Detect the declared encoding in Python 3.
Do not report redefinition of import in a local scope, if the global name is used elsewhere in the module.
Catch undefined variable in loop generator when it is also used as loop variable.
Report undefined name for (a, b) = (1, 2) but not for the general unpacking (a, b) = func().
Correctly detect when an imported module is used in default arguments of a method, when the method and the module use the same name.
Distribute a universal wheel file.
Nothing published for this version
Deprecate Checker.pushFunctionScope and Checker.pushClassScope: use Checker.pushScope instead.
Do not report undefined name for generator expression and dict or set comprehension at class level.
Deprecate Checker.pushFunctionScope and Checker.pushClassScope: use Checker.pushScope instead.
Remove dependency on Unittest2 for the tests.
Fix computation of DoctestSyntaxError.lineno and col.
Fix computation of DoctestSyntaxError.lineno and col.
Add boolean attribute Checker.withDoctest to ignore doctests.
If environment variable PYFLAKES_NODOCTEST is set, skip doctests.
Environment variable PYFLAKES_BUILTINS accepts a comma-separated list of additional built-in names.
File bin/pyflakes was missing in tarball generated with distribute.
File bin/pyflakes was missing in tarball generated with distribute.
Fix reporting errors in non-ASCII filenames (Python 2.x).
Nothing published for this version
Fix detection of variables in augmented assignments.
Fix detection of variables in augmented assignments.
Support Python 3 up to 3.3, based on the pyflakes3k project.
Support Python 3 up to 3.3, based on the pyflakes3k project.
Preserve compatibility with Python 2.5 and all recent versions of Python.
Support custom reporters in addition to the default Reporter.
Allow function redefinition for modern property construction via property.setter/deleter.
Fix spurious redefinition warnings in conditionals.
Do not report undefined name in __all__ if import * is used.
Add WindowsError as a known built-in name on all platforms.
Support specifying additional built-ins in the Checker constructor.
Don't issue Unused Variable warning when using locals() in current scope.
Handle problems with the encoding of source files.
Remove dependency on Twisted for the tests.
Support python setup.py test and python setup.py develop.
Create script using setuptools entry_points to support all platforms, including Windows.
Convert pyflakes to use newer _ast infrastructure rather than compiler.
Convert pyflakes to use newer _ast infrastructure rather than compiler.
Support for new syntax in 2.7 (including set literals, set comprehensions, and dictionary comprehensions).
Make sure class names don't get bound until after class definition.
Fix reporting for certain SyntaxErrors which lack line number information.
Fix reporting for certain SyntaxErrors which lack line number information.
Check for syntax errors more rigorously.
Support checking names used with the class decorator syntax in versions of Python which have it.
Detect local variables which are bound but never used.
Handle permission errors when trying to read source files.
Handle problems with the encoding of source files.
Support importing dotted names so as not to incorrectly report them as redefined unused names.
Support all forms of the with statement.
Consider static __all__ definitions and avoid reporting unused names if the names are listed there.
Fix incorrect checking of class names with respect to the names of their bases in the class statement.
Support the __path__ global in __init__.py.
Display more informative SyntaxError messages.
Display more informative SyntaxError messages.
Don't hang flymake with unmatched triple quotes (only report a single line of source for a multiline syntax error).
Recognize __builtins__ as a defined name.
Improve pyflakes support for python versions 2.3-2.5
Support for if-else expressions and with statements.
Warn instead of error on non-existent file paths.
Check for __future__ imports after other statements.
Add reporting for some types of import shadowing.
Improve reporting of unbound locals
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →