blob: f7f8cf50d388ab7c76dfca7f733e45f2d1a87458 [file] [log] [blame]
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../art/logo.png">
<meta name="generator" content="mkdocs-1.2.1, mkdocs-material-7.2.3">
<title>Introducing Isort 5 - isort</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.f7f47774.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.3f5d1f46.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../art/stylesheets/extra.css">
</head>
<body dir="ltr" data-md-color-scheme="isort" data-md-color-primary="" data-md-color-accent="">
<script>function __prefix(e){return new URL("../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#introducing-isort-5" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../index.html" title="isort" class="md-header__button md-logo" aria-label="isort" data-md-component="logo">
<img src="../../art/logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
isort
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Introducing Isort 5
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/timothycrosley/isort/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
isort
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../index.html" title="isort" class="md-nav__button md-logo" aria-label="isort" data-md-component="logo">
<img src="../../art/logo.png" alt="logo">
</a>
isort
</label>
<div class="md-nav__source">
<a href="https://github.com/timothycrosley/isort/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
isort
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../index.html" class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item">
<a href="../../CHANGELOG.html" class="md-nav__link">
Changelog
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3">
Configuration
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Configuration" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Configuration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../configuration/action_comments.html" class="md-nav__link">
Action Comments
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/add_or_remove_imports.html" class="md-nav__link">
Add Or Remove Imports
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/black_compatibility.html" class="md-nav__link">
Black Compatibility
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/config_files.html" class="md-nav__link">
Config Files
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/custom_sections_and_ordering.html" class="md-nav__link">
Custom Sections And Ordering
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/git_hook.html" class="md-nav__link">
Git Hook
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/github_action.html" class="md-nav__link">
Github Action
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/multi_line_output_modes.html" class="md-nav__link">
Multi Line Output Modes
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/options.html" class="md-nav__link">
Options
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/pre-commit.html" class="md-nav__link">
Pre Commit
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/profiles.html" class="md-nav__link">
Profiles
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/setuptools_integration.html" class="md-nav__link">
Setuptools Integration
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4">
Contributing
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Contributing" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Contributing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../contributing/1.-contributing-guide.html" class="md-nav__link">
1. Contributing Guide
</a>
</li>
<li class="md-nav__item">
<a href="../contributing/2.-coding-standard.html" class="md-nav__link">
2. Coding Standard
</a>
</li>
<li class="md-nav__item">
<a href="../contributing/3.-code-of-conduct.html" class="md-nav__link">
3. Code Of Conduct
</a>
</li>
<li class="md-nav__item">
<a href="../contributing/4.-acknowledgements.html" class="md-nav__link">
4. Acknowledgements
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5">
Howto
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Howto" data-md-level="1">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Howto
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../howto/shared_profiles.html" class="md-nav__link">
Shared Profiles
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" checked>
<label class="md-nav__link" for="__nav_6">
Major Releases
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Major Releases" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Major Releases
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="introducing_isort_5.html" class="md-nav__link md-nav__link--active">
Introducing Isort 5
</a>
</li>
<li class="md-nav__item">
<a href="release_policy.html" class="md-nav__link">
Release Policy
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7">
Quick Start
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Quick Start" data-md-level="1">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Quick Start
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../quick_start/0.-try.html" class="md-nav__link">
0. Try
</a>
</li>
<li class="md-nav__item">
<a href="../quick_start/1.-install.html" class="md-nav__link">
1. Install
</a>
</li>
<li class="md-nav__item">
<a href="../quick_start/2.-cli.html" class="md-nav__link">
2. Cli
</a>
</li>
<li class="md-nav__item">
<a href="../quick_start/3.-api.html" class="md-nav__link">
3. Api
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_8" type="checkbox" id="__nav_8" >
<label class="md-nav__link" for="__nav_8">
Upgrade Guides
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Upgrade Guides" data-md-level="1">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Upgrade Guides
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../upgrade_guides/5.0.0.html" class="md-nav__link">
5.0.0
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_9" type="checkbox" id="__nav_9" >
<label class="md-nav__link" for="__nav_9">
Warning And Error Codes
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Warning And Error Codes" data-md-level="1">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
Warning And Error Codes
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../warning_and_error_codes/W0500.html" class="md-nav__link">
W0500
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_10" type="checkbox" id="__nav_10" >
<label class="md-nav__link" for="__nav_10">
Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_10_1" type="checkbox" id="__nav_10_1" >
<label class="md-nav__link" for="__nav_10_1">
Isort
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Isort" data-md-level="2">
<label class="md-nav__title" for="__nav_10_1">
<span class="md-nav__icon md-icon"></span>
Isort
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../reference/isort/api.html" class="md-nav__link">
API
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/comments.html" class="md-nav__link">
Comments
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/core.html" class="md-nav__link">
Core
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/exceptions.html" class="md-nav__link">
Exceptions
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/files.html" class="md-nav__link">
Files
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/format.html" class="md-nav__link">
Format
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/hooks.html" class="md-nav__link">
Hooks
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/identify.html" class="md-nav__link">
Identify
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/index.html" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/io.html" class="md-nav__link">
Io
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/literal.html" class="md-nav__link">
Literal
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/logo.html" class="md-nav__link">
Logo
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/main.html" class="md-nav__link">
Main
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/output.html" class="md-nav__link">
Output
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/parse.html" class="md-nav__link">
Parse
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/place.html" class="md-nav__link">
Place
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/profiles.html" class="md-nav__link">
Profiles
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/pylama_isort.html" class="md-nav__link">
Pylama Isort
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/sections.html" class="md-nav__link">
Sections
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/settings.html" class="md-nav__link">
Settings
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/setuptools_commands.html" class="md-nav__link">
Setuptools Commands
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/sorting.html" class="md-nav__link">
Sorting
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/utils.html" class="md-nav__link">
Utils
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/wrap.html" class="md-nav__link">
Wrap
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/wrap_modes.html" class="md-nav__link">
Wrap Modes
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_10_1_26" type="checkbox" id="__nav_10_1_26" >
<label class="md-nav__link" for="__nav_10_1_26">
Deprecated
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Deprecated" data-md-level="3">
<label class="md-nav__title" for="__nav_10_1_26">
<span class="md-nav__icon md-icon"></span>
Deprecated
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../reference/isort/deprecated/finders.html" class="md-nav__link">
Finders
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/deprecated/index.html" class="md-nav__link">
Index
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_10_1_27" type="checkbox" id="__nav_10_1_27" >
<label class="md-nav__link" for="__nav_10_1_27">
Stdlibs
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Stdlibs" data-md-level="3">
<label class="md-nav__title" for="__nav_10_1_27">
<span class="md-nav__icon md-icon"></span>
Stdlibs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../reference/isort/stdlibs/all.html" class="md-nav__link">
All
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/stdlibs/index.html" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/stdlibs/py2.html" class="md-nav__link">
Py2
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/stdlibs/py27.html" class="md-nav__link">
Py27
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/stdlibs/py3.html" class="md-nav__link">
Py3
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/stdlibs/py310.html" class="md-nav__link">
Py310
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/stdlibs/py311.html" class="md-nav__link">
Py311
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/stdlibs/py36.html" class="md-nav__link">
Py36
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/stdlibs/py37.html" class="md-nav__link">
Py37
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/stdlibs/py38.html" class="md-nav__link">
Py38
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/isort/stdlibs/py39.html" class="md-nav__link">
Py39
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/pycqa/isort/edit/main/docs/major_releases/introducing_isort_5.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1 id="introducing-isort-5">Introducing isort 5</h1>
<p><a href="https://pycqa.github.io/isort/"><img alt="isort 5 - the best version of isort yet" src="https://raw.githubusercontent.com/pycqa/isort/main/art/logo_5.png" /></a></p>
<p>isort 5.0.0 is the first major release of isort in over five years and the first significant refactoring of isort since it was conceived more than ten years ago.
It's also the first version to require Python 3 (Python 3.6+ at that!) to run - though it can still be run on source files from any version of Python.
This does mean that there may be some pain with the upgrade process, but we believe the improvements will be well worth it.</p>
<p><a href="https://pycqa.github.io/isort/CHANGELOG.html">Click here for an attempt at full changelog with a list of breaking changes.</a></p>
<p><a href="https://pycqa.github.io/isort/docs/upgrade_guides/5.0.0.html">Using isort 4.x.x? Click here for the isort 5.0.0 upgrade guide.</a></p>
<p><a href="https://pycqa.github.io/isort/docs/quick_start/0.-try.html">Try isort 5 right now from your browser!</a></p>
<p>So why the massive change?</p>
<h1 id="profile-support">Profile support</h1>
<div class="codehilite"><pre><span></span><code>isort --profile black .
isort --profile django .
isort --profile pycharm .
isort --profile google .
isort --profile open_stack .
isort --profile plone .
isort --profile attrs .
isort --profile hug .
</code></pre></div>
<p>isort is very configurable. That's great, but it can be overwhelming, both for users and for the isort project. isort now comes with profiles for the most common isort configurations,
so you likely will not need to configure anything at all. This also means that as a project, isort can run extensive tests against these specific profiles to ensure nothing breaks over time.</p>
<h1 id="sort-imports-anywhere">Sort imports <strong>anywhere</strong></h1>
<div class="codehilite"><pre><span></span><code><span class="kn">import</span> <span class="nn">a</span> <span class="c1"># &lt;- These are sorted</span>
<span class="kn">import</span> <span class="nn">b</span>
<span class="n">b</span><span class="o">.</span><span class="n">install</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="kn">import</span> <span class="nn">os</span> <span class="c1"># &lt;- And these are sorted</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">my_function</span><span class="p">():</span>
<span class="kn">import</span> <span class="nn">x</span> <span class="c1"># &lt;- Even these are sorted!</span>
<span class="kn">import</span> <span class="nn">z</span>
</code></pre></div>
<p>isort 5 will find and sort contiguous section of imports no matter where they are.
It also allows you to place code in-between imports without any hacks required.</p>
<h1 id="streaming-architecture">Streaming architecture</h1>
<div class="codehilite"><pre><span></span><code><span class="kn">import</span> <span class="nn">a</span>
<span class="kn">import</span> <span class="nn">b</span>
<span class="o">...</span>
<span class="err">∞</span>
</code></pre></div>
<p>isort has been refactored to use a streaming architecture. This means it can sort files of <em>any</em> size (even larger than the Python interpreter supports!) without breaking a sweat.
It also means that even when sorting imports in smaller files, it is faster and more resource-efficient.</p>
<h1 id="consistent-behavior-across-all-environments">Consistent behavior across <strong>all</strong> environments</h1>
<p>Sorting the same file with the same configuration should give you the same output no matter what computer or OS you are running. Extensive effort has been placed around refactoring
how modules are placed and how configuration files are loaded to ensure this is the case.</p>
<h1 id="cython-support">Cython support</h1>
<div class="codehilite"><pre><span></span><code><span class="n">cimport</span> <span class="n">ctime</span>
<span class="kn">from</span> <span class="nn">cpython</span> <span class="n">cimport</span> <span class="n">PyLong_FromVoidPtr</span>
<span class="kn">from</span> <span class="nn">cpython</span> <span class="n">cimport</span> <span class="nb">bool</span> <span class="k">as</span> <span class="n">py_bool</span>
<span class="kn">from</span> <span class="nn">cython.operator</span> <span class="n">cimport</span> <span class="n">dereference</span> <span class="k">as</span> <span class="n">deref</span>
<span class="kn">from</span> <span class="nn">cython.operator</span> <span class="n">cimport</span> <span class="n">preincrement</span> <span class="k">as</span> <span class="n">preinc</span>
<span class="kn">from</span> <span class="nn">libc.stdint</span> <span class="n">cimport</span> <span class="n">uint64_t</span><span class="p">,</span> <span class="n">uintptr_t</span>
<span class="kn">from</span> <span class="nn">libc.stdlib</span> <span class="n">cimport</span> <span class="n">atoi</span><span class="p">,</span> <span class="n">calloc</span><span class="p">,</span> <span class="n">free</span><span class="p">,</span> <span class="n">malloc</span>
<span class="kn">from</span> <span class="nn">libc.string</span> <span class="n">cimport</span> <span class="n">memcpy</span><span class="p">,</span> <span class="n">strlen</span>
<span class="kn">from</span> <span class="nn">libcpp</span> <span class="n">cimport</span> <span class="nb">bool</span> <span class="k">as</span> <span class="n">cpp_bool</span>
<span class="kn">from</span> <span class="nn">libcpp.map</span> <span class="n">cimport</span> <span class="nb">map</span> <span class="k">as</span> <span class="n">cpp_map</span>
<span class="kn">from</span> <span class="nn">libcpp.pair</span> <span class="n">cimport</span> <span class="n">pair</span> <span class="k">as</span> <span class="n">cpp_pair</span>
<span class="kn">from</span> <span class="nn">libcpp.string</span> <span class="n">cimport</span> <span class="n">string</span> <span class="k">as</span> <span class="n">cpp_string</span>
<span class="kn">from</span> <span class="nn">libcpp.vector</span> <span class="n">cimport</span> <span class="n">vector</span> <span class="k">as</span> <span class="n">cpp_vector</span>
<span class="kn">from</span> <span class="nn">multimap</span> <span class="n">cimport</span> <span class="n">multimap</span> <span class="k">as</span> <span class="n">cpp_multimap</span>
<span class="kn">from</span> <span class="nn">wstring</span> <span class="n">cimport</span> <span class="n">wstring</span> <span class="k">as</span> <span class="n">cpp_wstring</span>
</code></pre></div>
<p>isort 5 adds seamless support for Cython (<code>.pyx</code>) files.</p>
<h1 id="action-comments">Action Comments</h1>
<div class="codehilite"><pre><span></span><code><span class="kn">import</span> <span class="nn">e</span>
<span class="kn">import</span> <span class="nn">f</span>
<span class="c1"># isort: off &lt;- Turns isort parsing off</span>
<span class="kn">import</span> <span class="nn">b</span>
<span class="kn">import</span> <span class="nn">a</span>
<span class="c1"># isort: on &lt;- Turns isort parsing back on</span>
<span class="kn">import</span> <span class="nn">c</span>
<span class="kn">import</span> <span class="nn">d</span>
</code></pre></div>
<p>isort 5 adds support for <a href="https://pycqa.github.io/isort/docs/configuration/action_comments.html">Action Comments</a> which provide a quick and convient way to control the flow of parsing within single source files.</p>
<h1 id="first-class-python-api">First class Python API</h1>
<div class="codehilite"><pre><span></span><code><span class="kn">import</span> <span class="nn">isort</span>
<span class="n">isort</span><span class="o">.</span><span class="n">code</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2">import b</span>
<span class="s2">import a</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="s2">import a</span>
<span class="s2">import b</span>
<span class="s2">&quot;&quot;&quot;</span>
</code></pre></div>
<p>isort now exposes its programmatic API as a first-class citizen. This API makes it easy to extend or use isort in your own Python project. You can see the full documentation for this new API <a href="https://pycqa.github.io/isort/reference/isort/api.html">here</a>.</p>
<h1 id="solid-base-for-the-future">Solid base for the future</h1>
<p>A major focus for the release was to give isort a solid foundation for the next 5-10 years of the project's life.
isort has been refactored into functional components that are easily testable. The project now has 100% code coverage.
It utilizes tools like <a href="https://hypothesis.readthedocs.io/en/latest/">Hypothesis</a> to reduce the number of unexpected errors.
It went from fully dynamic to fully static typing using mypy. Finally, it utilizes the latest linters both on (like <a href="https://deepsource.io/gh/pycqa/isort/">DeepSource</a>) and offline (like <a href="https://flake8.pycqa.org/en/latest/">Flake8</a>) to help ensure a higher bar for all code contributions into the future.</p>
<h1 id="give-500-a-try">Give 5.0.0 a try!</h1>
<p><a href="https://pycqa.github.io/isort/docs/quick_start/0.-try.html">Try isort 5 right now from your browser!</a></p>
<p>OR</p>
<p>Install isort locally using <code>pip3 install isort</code>.</p>
<p><a href="https://pycqa.github.io/isort/docs/quick_start/1.-install.html">Click here for full installation instructions.</a></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="../howto/shared_profiles.html" title="Shared Profiles" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
Shared Profiles
</span>
</div>
</a>
<a href="release_policy.html" title="Release Policy" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
Release Policy
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Powered by
<a href="http://timothycrosley.github.io/portray">portray.</a>
You too can
<a href="http://timothycrosley.github.io/portray">
portray</a>
your Python project well using automatic documentation.
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing", "select.version.title": "Select version"}, "search": "../../assets/javascripts/workers/search.709b4209.min.js", "version": null}</script>
<script src="../../assets/javascripts/bundle.29db7785.min.js"></script>
</body>
</html>