Setting up Matplotlib for development#
To set up Matplotlib for development follow these steps:
Fork the Matplotlib repository#
Matplotlib is hosted at matplotlib/matplotlib.git. If you plan on solving issues or submitting pull requests to the main Matplotlib repository, you should first fork this repository by clicking the Fork button near the top of the project repository page.
This creates a copy of the code under your account on the GitHub server. See the GitHub documentation for more details.
Set up development environment#
You can either work locally on your machine, or online in GitHub Codespaces, a cloud-based in-browser development environment.
- local:
If you are making extensive or frequent contributions to Matplotlib then it is probably worth taking the time to set up on your local machine: As well as having the convenience of your local familiar tools, you will not need to worry about Codespace's monthly usage limits.
- codespaces:
If you are making a one-off, relatively simple, change then working in GitHub Codespaces can be a good option because most of the setting up is done for you and you can skip the next few sections.
If you want to use Codespaces, skip to Create GitHub Codespace , otherwise, continue with the next section.
Create local environment#
Get most recent code#
Now that your fork of the repository lives under your GitHub username, you can
retrieve the most recent version of the source code with one of the following
commands (replace <your-username>
with your GitHub username):
git clone https://github.com/<your-username>/matplotlib.git
git clone [email protected]:<your-username>/matplotlib.git
This requires you to setup an SSH key in advance, but saves you from typing your password at every connection.
This will place the sources in a directory matplotlib
below your
current working directory and set the remote name origin
to point to your
fork. Change into this directory before continuing:
cd matplotlib
Now set the remote name upstream
to point to the Matplotlib main repository:
git remote add upstream https://github.com/matplotlib/matplotlib.git
git remote add upstream [email protected]:matplotlib/matplotlib.git
You can now use upstream
to retrieve the most current snapshot of the source
code, as described in Development workflow.
Additional git
and GitHub
resources
For more information on git
and GitHub
, see:
Create a dedicated environment#
You should set up a dedicated environment to decouple your Matplotlib development from other Python and Matplotlib installations on your system.
We recommend using one of the following options for a dedicated development environment because these options are configured to install the Python dependencies as part of their setup.
Create a new venv environment with
python -m venv <file folder location>
and activate it with one of the following :
source <file folder location>/bin/activate # Linux/macOS
<file folder location>\Scripts\activate.bat
<file folder location>\Scripts\Activate.ps1
On some systems, you may need to type python3
instead of python
.
For a discussion of the technical reasons, see PEP-394.
Install the Python dependencies with
pip install -r requirements/dev/dev-requirements.txt
Remember to activate the environment whenever you start working on Matplotlib!
Create a new conda environment and install the Python dependencies with
conda env create -f environment.yml
You can use mamba
instead of conda
in the above command if
you have mamba installed.
Activate the environment using
conda activate mpl-dev
Remember to activate the environment whenever you start working on Matplotlib!
Install external dependencies#
Python dependencies were installed as part of setting up the environment. Additionally, the following non-Python dependencies must also be installed locally:
For a full list of dependencies, see Dependencies. External dependencies do not need to be installed when working in codespaces.
Install Matplotlib in editable mode#
Install Matplotlib in editable mode from the matplotlib
directory using the
command
python -m pip install --verbose --no-build-isolation --editable ".[dev]"
The 'editable/develop mode' builds everything and places links in your Python environment
so that Python will be able to import Matplotlib from your development source directory.
This allows you to import your modified version of Matplotlib without having to
re-install after changing a .py
or compiled extension file.
When working on a branch that does not have Meson enabled, meaning it does not have PR #26621 in its history (log), you will have to reinstall from source each time you change any compiled extension code.
If the installation is not working, please consult the troubleshooting guide. If the guide does not offer a solution, please reach out via chat or open an issue.
Build options#
If you are working heavily with files that need to be compiled, you may want to
inspect the compilation log. This can be enabled by setting the environment
variable MESONPY_EDITABLE_VERBOSE
or by setting the editable-verbose
config during installation
python -m pip install --no-build-isolation --config-settings=editable-verbose=true --editable .
For more information on installation and other configuration options, see the Meson Python editable installs guide.
For a list of the other environment variables you can set before install, see Environment variables.
Verify the Installation#
Run the following command to make sure you have correctly installed Matplotlib in editable mode. The command should be run when the virtual environment is activated:
python -c "import matplotlib; print(matplotlib.__file__)"
This command should return : <matplotlib_local_repo>\lib\matplotlib\__init__.py
We encourage you to run tests and build docs to verify that the code installed correctly and that the docs build cleanly, so that when you make code or document related changes you are aware of the existing issues beforehand.
Run test cases to verify installation Testing
Verify documentation build Write documentation
Install pre-commit hooks#
pre-commit hooks save time in the review process by identifying issues with the code before a pull request is formally opened. Most hooks can also aide in fixing the errors, and the checks should have corresponding development workflow and pull request guidelines. Hooks are configured in .pre-commit-config.yaml and include checks for spelling and formatting, flake 8 conformity, accidentally committed files, import order, and incorrect branching.
Install pre-commit hooks
python -m pip install pre-commit
pre-commit install
Hooks are run automatically after the git commit
stage of the
editing workflow. When a hook has found and fixed an error in a
file, that file must be staged and committed again.
Hooks can also be run manually. All the hooks can be run, in order as
listed in .pre-commit-config.yaml
, against the full codebase with
pre-commit run --all-files
To run a particular hook manually, run pre-commit run
with the hook id
pre-commit run <hook id> --all-files
Please note that the mypy
pre-commit hook cannot check the Type hints
for new functions; instead the stubs for new functions are checked using the
stubtest
CI check and can be checked locally using
tox -e stubtest
.