This guide is a comprehensive resource for contributing to
– for both new and experienced contributors. It is
by the same community that maintains Python. We welcome your contributions!
Start with the area that best matches what you want to do. If you still have questions after reviewing the material in this guide, then the
group is available to help guide new contributors through the process.
Documentation
Code
Triage
Helping with the Developer’s Guide
Fixing “easy” issues (and beyond)
Following Python’s development
We recommend that sections of this guide be read as needed. You can stop where you feel comfortable and begin contributing immediately without reading and understanding everything. If you do choose to skip around within the guide, be aware that some sections build on each other, so you may need to backtrack for missing concepts or terminology.
For broader open-source contribution advice, a number of individuals from the Python community have contributed to a series of excellent guides at
. For example,
How to Contribute to Open Source
.
You don’t have to be a compiler engineer to work on Python – Savannah Ostrowski
Quick reference
Note
The quick reference documentation has been moved to serve as a cheat-sheet and overview in
.
Go to
.
Proposing changes to Python itself
Improving Python’s code, documentation and tests are ongoing tasks that are never going to be “finished”, as Python operates as part of an ever-evolving system of technology. An even more challenging ongoing task than these necessary maintenance activities is finding ways to make Python, in the form of the standard library and the language definition, an even better tool in a developer’s toolkit.
While these kinds of change are much rarer than those described above, they do happen and that process is also described as part of this guide:
Key resources
Coding style guides
(Style Guide for C Code)
(Style Guide for Python Code)
Source code
of the main branch
(Python Enhancement Proposals)
Additional resources
Anyone can clone the sources for this guide. See
Helping with the Developer’s Guide
.
Help with …
Tool support
Various tools with configuration files as found in the
directory
Code of conduct
Please note that all interactions on
-supported infrastructure is
by the
, which includes all infrastructure used in the development of Python itself (for example, Discourse, issue trackers, GitHub, and so on). In general this means everyone is expected to be open, considerate, and respectful of others no matter what their position is within the project.
Other interpreter implementations
This guide is specifically for contributing to the Python reference interpreter, also known as CPython (while most of the standard library is written in Python, the interpreter core is written in C and integrates most easily with the C and C++ ecosystems).
There are other Python implementations, each with a different focus. Like CPython, they always have more things they would like to do than they have developers to work on them. Some major examples that may be of interest are:
: A Python interpreter focused on high speed (JIT-compiled) operation on major platforms.
: A Python interpreter which has first-class support for embedding in Java, built on GraalVM.
: A Python interpreter focused on good integration with the Java Virtual Machine (JVM) environment.
: A Python interpreter focused on good integration with the Common Language Runtime (CLR) provided by .NET and Mono.
: A tiny Python interpreter with small subset of the Python standard library that is optimised to run on microcontrollers and in constrained environments.
: A fork of MicroPython designed to simplify experimenting and learning to code on low-cost microcontroller boards.
Full table of contents
Create issues and pull requests
Fixing “easy” issues (and beyond)
Forking CPython GitHub repository
Cloning a forked CPython repository
Listing the remote repositories
Setting up your name and email address
Creating and switching branches
Linking to issues and pull requests
Checking out others’ pull requests
Accepting and merging a pull request
Editing a pull request prior to merging
Updating NEWS and What’s New in Python
Converting an existing patch from b.p.o to GitHub
Keeping continuous integration green
Following Python’s development
Standards of behaviour in these communication channels
Communicating across cultures and languages
Discourse (discuss.python.org web forum)
Setting expectations for open-source participation
Suggesting new features and language changes
Adding to a pre-existing module
Adding a new environment variable
Standard library extension modules
Adding an extension module to CPython
Disagreement with a resolution
Becoming a member of the Python triage team
Helping with documentation issues
Security considerations (and other concerns)
Helping with the Developer’s Guide
Silence warnings from the test suite
Measuring coverage of C code with gcov and lcov
Buildbot failures on pull requests
Checking results of automatic builds
Preparing for buildbot worker setup
Setting up the buildbot worker
Tools for tracking compiler warnings
What to do if a warning check fails GitHub CI
Updating the warning ignore file
Communication channels and bug notifications
Procedure for granting or dropping access
What types of bugs are vulnerabilities?
What versions of Python accept reports?
What to include and how to structure a vulnerability report?
How to submit a vulnerability report?
When are security fixes released or backported?
Python Security Response Team (PSRT)
Triaging a vulnerability report
Remediating a vulnerability report
Handling code signing certificate reports