Run any Python code quality tool on a Jupyter Notebook!
Project description
nbQA
Adapter to run any code-quality tool on a Jupyter notebook. Documentation is hosted here.
Prerequisites
If you don’t have pip installed, this Python installation guide can guide you through the process.
Installation
Install nbqa
with
$ pip install nbqa
There are no dependencies for nbqa
so installation should be lightning-fast.
Check your installation with
$ nbqa --version
nbqa 0.1.14
Quickstart
The general syntax is
nbqa <command> <notebook or directory> <args>
, where command
is any standard Python code quality tool. For example, you could run:
$ nbqa flake8 my_notebook.ipynb
$ nbqa black my_notebook.ipynb --check
$ nbqa mypy my_notebook.ipynb --ignore-missing-imports
$ nbqa pytest my_notebook.ipynb --doctest-modules
You can also pass an entire directory instead of a single file, e.g. nbqa flake8 my_notebooks
.
Examples
Format your notebooks using black
:
$ nbqa black . --line-length=96
reformatted tweet-sentiment-roberta-pytorch.ipynb
All done! ✨ 🍰 ✨
1 files reformatted.
Check static type annotations:
$ nbqa mypy tweet-sentiment-roberta-pytorch.ipynb --ignore-missing-imports
tweet-sentiment-roberta-pytorch.ipynb:cell_10:5: error: Argument "batch_size" to "get_test_loader" has incompatible type "str"; expected "int"
Check any examples in your docstrings are correct:
$ nbqa pytest tweet-sentiment-roberta-pytorch.ipynb --doctest-modules
============================= test session starts ==============================
platform linux -- Python 3.8.2, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
rootdir: /home/marco/tweet-sentiment-extraction
plugins: cov-2.10.0
collected 3 items
tweet-sentiment-roberta-pytorch.ipynb . [100%]
============================== 1 passed in 0.03s ===============================
Supported third party packages
In theory, nbqa
can adapt any Python code-quality tool to a Jupyter Notebook.
In practice, here are the tools it’s been tested with:
Configuration
By default, nbQA will use your tools’ standard configuration files (e.g. setup.cfg
, mypy.ini
).
You can pass extra configurations to your tools either via the command line (as in the
examples above), or in a .nbqa.ini
file, which could look something like this:
[black]
line-length=96
[flake8]
max-line-length=96
ignore=E203,W503,W504
Flags from this .ini
will be passed to nbqa
as they’re written.
Usage as pre-commit hook
If you want to use nbqa
with pre-commit, here’s an example of what you
could add to your .pre-commit-config.yaml
file:
- repo: https://github.com/MarcoGorelli/nbQA
rev: 0.1.14
hooks:
- id: nbqa
args: ['flake8']
name: nbqa-flake8
additional_dependencies: ['flake8']
- id: nbqa
args: ['isort']
name: nbqa-isort
additional_dependencies: ['isort']
- id: nbqa
args: ['mypy']
name: nbqa-mypy
additional_dependencies: ['mypy']
See Also
Here are some specialised code quality tools for Jupyter Notebooks:
Project template from cookiecutter.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.