NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #282 most downloaded on PyPI
A Python utility / library to sort Python imports.
Last release 6 days ago
28 Sep 2026
Release timing varies
gaps range from 8 days to 7 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
159 releases · first in 2013
Preserve blank lines before comment-only sections by @fzlzjerry in #2655
process by @DanielNoord in #2677Full Changelog: 9.0.1...9.0.2
One column per quarter.
Restore python -m isort by excluding __main__ from mypyc compilation by @DanielNoord with @Copilot in #2643
python -m isort by excluding __main__ from mypyc compilation by @DanielNoord with @Copilot in #2643Full Changelog: 9.0.0...9.0.1
Remove logic for deprecated options ( #2498 ) @DanielNoord
isort 9.0.0 is the result of several alpha and beta releases, as well as a small number of fixes added after the last beta. For release notes for the individual alphas and betas we would like to refer to:
Skipped version numbers are the result of changes to our release infrastructure that broke while creating the actual releases.
Please find below the full release notes for version 9.0.0, the newest release of isort after version 8.0.1.
isort 9.0.0 contains some significant changes and improvements. Most notably there is now support for Python 3.15 and its lazy imports and we have included several performance improvements as well as providing mypyc compiled wheels for all major platforms and supported versions of Python. In our own tests we saw speeds ups of more than 2x and 3x times, but this is highly dependent on the codebase isort needs to inspect.
The full list of changes is as follows:
mypyc by @DanielNoord in #2586posixpath.abspath by @DanielNoord in #2606stdlib modules to be stdlib (#2295) @devdanzinfrom X import lines (#2499) @copilot-swe-agentcheck_code when using float_to_top + add_imports (#2492) @copilot-swe-agent# inline comments on imports (#2488) @copilot-swe-agent# isort: off/on/split during float_to_top preprocessing with CRLF input by @DanielNoord with @Copilot in #2553# isort: skip when a __future__ import is present (#2092) by @apoorvdarshan in #2574__all__ and literals black-compatible (#2280) by @lord-haffi in #2576* imports by @DanielNoord in #2619Any from parse.py (#2516) @DanielNoordgit_ignore config by @sparrowt in #2531tomli by @DanielNoord in #2579cruft by @DanielNoord in #2610mypyc compiled wheels by @DanielNoord in #2623mypyc by @DanielNoord in #2625test_importable for local dev by @DanielNoord in #2635Full Changelog: 8.0.1...9.0.0
mypyc by @DanielNoord in https://github.com/PyCQA/isort/pull/2586posixpath.abspath by @DanielNoord in https://github.com/PyCQA/isort/pull/2606stdlib modules to be stdlib (#2295) @devdanzinfrom X import lines (#2499) @copilot-swe-agentcheck_code when using float_to_top + add_imports (#2492) @copilot-swe-agent# inline comments on imports (#2488) @copilot-swe-agent# isort: off/on/split during float_to_top preprocessing with CRLF input by @DanielNoord with @Copilot in https://github.com/PyCQA/isort/pull/2553# isort: skip when a __future__ import is present (#2092) by @apoorvdarshan in https://github.com/PyCQA/isort/pull/2574__all__ and literals black-compatible (#2280) by @lord-haffi in https://github.com/PyCQA/isort/pull/2576* imports by @DanielNoord in https://github.com/PyCQA/isort/pull/2619Any from parse.py (#2516) @DanielNoordgit_ignore config by @sparrowt in https://github.com/PyCQA/isort/pull/2531tomli by @DanielNoord in https://github.com/PyCQA/isort/pull/2579cruft by @DanielNoord in https://github.com/PyCQA/isort/pull/2610mypyc compiled wheels by @DanielNoord in https://github.com/PyCQA/isort/pull/2623mypyc by @DanielNoord in https://github.com/PyCQA/isort/pull/2625test_importable for local dev by @DanielNoord in https://github.com/PyCQA/isort/pull/2635Please see the release notes of 9.0.0a2 , 9.0.0a3 , 9.0.0b1 and 9.0.0b2 for additional changes compared to the last full release.
Please see the release notes of 9.0.0a2, 9.0.0a3, 9.0.0b1 and 9.0.0b2 for additional changes compared to the last full release.
isort now provides wheels that contain code compiled with mypyc. Depending on your use of isort this can provide a 10% reduction in the time it takes for isort to check your code.
mypyc by @DanielNoord in #2586cruft by @DanielNoord in #2610mypyc compiled wheels by @DanielNoord in #2623mypyc by @DanielNoord in #2625Please see the release notes of 9.0.0a2 , 9.0.0a3 and 9.0.0b1 for additional changes compared to the last full release.
Please see the release notes of 9.0.0a2, 9.0.0a3 and 9.0.0b1 for additional changes compared to the last full release.
posixpath.abspath by @DanielNoord in #2606* imports by @DanielNoord in #2619tomli by @DanielNoord in #2579Please see the release notes of 9.0.0a2 and 9.0.0a3 for additional changes compared to the last full release.
Please see the release notes of 9.0.0a2 and 9.0.0a3 for additional changes compared to the last full release.
# isort: off/on/split during float_to_top preprocessing with CRLF input by @DanielNoord with @Copilot in #2553# isort: skip when a future import is present (#2092) by @apoorvdarshan in #2574git_ignore config by @sparrowt in #2531Fix #2500 : trusted publishing by @staticdev in #2521
Full Changelog: 9.0.0a2...9.0.0a3
Remove logic for deprecated options ( #2498 ) @DanielNoord
stdlib modules to be stdlib (#2295) @devdanzinfrom X import lines (#2499) @copilot-swe-agent[bot]check_code when using float_to_top + add_imports (#2492) @copilot-swe-agent[bot]# inline comments on imports (#2488) @copilot-swe-agent[bot]Any from parse.py (#2516) @DanielNoordNote that 9.0.0a1 was never released due to issues with our release infrastructure.
Fix #2461 : Added compression to stdlibs for Python 3.14 in isort/stdlibs/py314.py ( #2463 ) @FinlayTheBerry
Update CHANGELOG for version 8.0.0 ( #2460 ) @DanielNoord
__future__ import. (#2458) @skv0zsnegsetuptools plugin (#2427) @DanielNoordlines_before_import sometimes ignored (#1965) @robsdedudemultiprocessing.Pool is always closed and joined (#2442) @DanielNoord--old-finders and --magic-placement flags and old_finders configuration option. The legacy finder logic that relied on environment introspection has been removed (#2445) @joao-faria-dev
plone profile to not clash with black (#2456) @ale-rtDrop support for Python 3.9 (#2430) @DanielNoord
3.14 and fix any bugs (#2425) @DanielNoordruff instead of black (#2432) @DanielNoordruff (#2431) @DanielNoordUpdate docs discussions channel (#2410) @staticdev
fix multi_line_output_modes docs (#2096) @xinydev
nit: Fix deprecation message link (#2220) @syou6162
as imports (#2340) @DanielNoordpre-commit autoupdate (#2321) @kurtmckee--diff to be used with --jobs (#2302) @mnakamawemake has 80 chars hard limit, not 79 (#2241) @sobolevnmain (#2320) @DanielNoordsort_reexports code mangling (#2283) @Helvegactions/cache@v2 usage (#2322) @kurtmckeepre-commit (#2296) @matthewhughes934poetry to 2.0.1 (#2341) @DanielNoordNothing published for this version
Nothing published for this version
Nothing published for this version
Apply the bracket fix from issue 471 only for use_parentheses=True (#2184) @bp72
Fix integration tests (#2208) @bp72
Cleanup deprecated extras (#2089) @staticdev
wemake linter (#2183) @skatrombtest_git_hook (#2196) @mgornypyproject.toml (#2115) @SauravMaheshkarsettings_path from --filename (#1992) @kasteFix poetry pip-shims extras dependency (#2078) @jooola
Fixed incompatiblity with latest poetry version
Remove obsolete toml import from the test suite (#1978) @mgorny
toml import from the test suite (#1978) @mgornyRenable portray (#2043) @timothycrosley
Hotfix for --version. (#2035) @felixxm
--version. (#2035) @felixxmOnly call colorama.init if colorama is available (#2032) @tomaarsen
colorama.init if colorama is available (#2032) @tomaarsencolorama.init if colorama is available (#2032) @tomaarsenAdd support to Python 3.11 support (#2024) @staticdev
black compatibility for .pyi type stub files (#2017) @XuehaiPanmulti_line_output = 3 from "Compatibility with black" (#1858) @jdufresneblack compatibility for .pyi files @XuehaiPanblack, plus three settings. (#1926) @mauritsvanreeslines_before_imports appending lines after comments (#1861) @legaumulti_line_output = 3 from "Compatibility with black" (#1858) @jdufresneFixed #1819: Occasional inconsistency with multiple src paths.
Implemented #1796: Switch to tomli for pyproject.toml configuration loader. Fixed #1801: CLI bug (--exend-skip-glob, overrides instead of extending).
Implemented #1796: Switch to tomli for pyproject.toml configuration loader. Fixed #1801: CLI bug (--exend-skip-glob, overrides instead of extending). Fixed #1802: respect PATH customization in nested calls to git. Fixed #1838: Append only with certain code snippets incorrectly adds imports. Added official support for Python 3.10
tomli for pyproject.toml configuration loader.
_ast module incorrectly excluded from stdlib definition.Improved text of skipped file message to mention gitignore feature.
--from-first CLI flag shouldn't take any arguments.Improved behavior of isort --check --atomic against Cython files.
isort --check --atomic against Cython files.__init__.py files during placement.Fixed #1758: projects with many files and skip_ignore set can lead to a command-line overload.
Implemented #1697: Provisional support for PEP 582: skip __pypackages__ directories by default.
__pypackages__ directories by default.__pypackages__ directories by default.Fixed #1631: as import comments can in some cases be duplicated.
-j) now defaults to number of CPU cores if no value is provided.--overwrite-in-place to ensure same file handle is used after sorting.--extend-skip and --extend-skip-glob.Fixed #1612: In rare circumstances an extra comma is added after import and before comment.
isort.file.Fixed #1556: Empty line added between imports that should be skipped.
Improved packaging of test files alongside source distribution (see: https://github.com/PyCQA/isort/pull/1555).
Fixed #1548: On rare occasions an unecessary empty line can be added when an import is marked as skipped.
Fixed #1546: Unstable (non-idempotent) behavior with certain src trees.
Implemented #1433: Provide helpful feedback in case a custom config file is specified without a configuration.
.pxd files.isort . --show-files.Potentially breaking changes:
Goal Zero: (Tickets related to aspirational goal of achieving 0 regressions for remaining 5.0.0 lifespan):
Fixed #1539: in extremely rare cases isort 5.5.4 introduces syntax error by removing closing paren.
Fixed #1507: in rare cases isort changes the content of multiline strings after a yield statement.
Fixed #1488: in rare cases isort can mangle yield from or raise from statements.
yield from or raise from statements.Fixed #1469: --diff option is ignored when input is from stdin.
Fixed #1454: Ensure indented import sections with import heading and a preceding comment don't cause import sorting loops.
Fixed #1447: isort5 throws error when stdin used on Windows with deprecated args.
combine_star is set.Goal Zero (Tickets related to aspirational goal of achieving 0 regressions for remaining 5.0.0 lifespan):
Potentially breaking changes:
ERROR: messages for files that contain incorrect imports within stdout you will now need to look in stderr.Fixed #1383: Known other does not work anymore with .editorconfig.
Fixed #1381: --combine-as loses # noqa in different circumstances.
Implemented #1373: support for length sort only of direct (AKA straight) imports.
Fixed incorrect warning code (W503->W0503).
Improve upgrade warnings to be less noisy and point to error codes for easy interoperability with Visual Studio Code (see: #1363).
Improved handling of deprecated single line variables for usage with Visual Studio Code (issue #1363)
Internal Development:
Fixed #1356: return status when arguments are passed in without files or a content stream.
Update precommit to default to filtering files that are defined in skip.
skip config usage.--color.Implemented #1335: Official API for diff capturing.
filter_files can now be set in the config option.multi_line_output mode for more compact formatting (Thanks @sztamas!)# isort: split can now be used at the end of an import line.--diff works incorrectly with files that have CRLF line endings.Fixed issue #1333: Use of wrap_length raises an exception about it not being lower or equal to line_length.
show_unified_diff function.Fixed issue #1329: Fix comments duplicated when --fass option is set.
Fixed issue #1219 / #1326: Comments not wrapped for long lines
Fixed issue #1322: Occasionally two extra newlines before comment with -n & --fss.
-n & --fss.--diff broken when reading from standard input.Fixed #1192: -k or --keep-direct-and-as-imports option has been deprecated as it is now always on.
-k or --keep-direct-and-as-imports option has been deprecated as it is now always on.Formatting changes implied:
Your coding agent can read these notes before it upgrades. Set up the MCP server →