Black is able to read project-specific default values for its command line options
pyproject.toml file. This is especially useful for specifying custom
--extend-exclude patterns for your project.
Pro-tip: If you’re asking yourself “Do I need to configure anything?” the answer is “No”. Black is all about sensible defaults.
What on Earth is a
PEP 518 defines
pyproject.toml as a
configuration file to store build system requirements for Python projects. With the help
of tools like Poetry or
Flit it can fully replace the need for
Where Black looks for the file¶
By default Black looks for
pyproject.toml starting from the common base directory of
all files and directories passed on the command line. If it’s not there, it looks in
parent directories. It stops looking when it finds the file, or a
.git directory, or a
.hg directory, or the root of the file system, whichever comes first.
If you’re formatting standard input, Black will look for configuration starting from the current working directory.
You can use a “global” configuration, stored in a specific location in your home directory. This will be used as a fallback configuration, that is, it will be used if and only if Black doesn’t find any configuration as mentioned above. Depending on your operating system, this configuration file should be stored as:
Unix-like (Linux, MacOS, etc.):
XDG_CONFIG_HOMEenvironment variable is not set)
Note that these are paths to the TOML file itself (meaning that they shouldn’t be named
pyproject.toml), not directories where you store the configuration. Here,
refers to the path to your home directory. On Windows, this will be something like
You can also explicitly specify the path to a particular file that you want with
--config. In this situation Black will not look for any other file.
If you’re running with
--verbose, you will see a blue message if a file was found and
blackd will not use
As the file extension suggests,
pyproject.toml is a
TOML file. It contains separate sections for
different tools. Black is using the
[tool.black] section. The option keys are the
same as long names of options on the command line.
Note that you have to use single-quoted strings in TOML for regular expressions. It’s
the equivalent of r-strings in Python. Multiline strings are treated as verbose regular
expressions by Black. Use
[ ] to denote a significant space character.
[tool.black] line-length = 88 target-version = ['py37'] include = '\.pyi?$' extend-exclude = ''' # A regex preceded with ^/ will apply only to files and directories # in the root of the project. ^/foo.py # exclude a file named foo.py in the root of the project (in addition to the defaults) '''
Command-line options have defaults that you can see in
override those defaults. Finally, options provided by the user on the command line
Black will only ever use one
pyproject.toml file during an entire run. It doesn’t
look for multiple files, and doesn’t compose configuration from different levels of the