Modèle .gitignore Python expliqué
Explique pourquoi Python.gitignore ignore __pycache__, les environnements virtuels, les artefacts de packaging, les caches de tests et de vérification de types et les configurations secrètes, ainsi que les pièges liés à lib/ et aux lockfiles.
Python.gitignore est un grand modèle conçu pour tout couvrir, du projet Python pur aux applications web Django·Flask, en passant par la science des données et la publication de paquets. Il réunit les caches de bytecode, les environnements virtuels, les dossiers de packaging créés par setup.py ou les backends de build, et les caches d'outils comme pytest, mypy ou ruff.
Avec autant de règles, certains chemins sont touchés sans qu'on le veuille. En particulier, des répertoires aux noms courants comme lib/, build/, dist/ ou target/ sont ignorés quelle que soit leur profondeur : dans un dépôt qui mélange plusieurs langages, mieux vaut tester le résultat une fois.
Explication règle par règle
| Motif | Ce qui est ignoré et pourquoi |
|---|---|
__pycache__/*.py[codz]*$py.class*.so | Bytecode et modules d'extensionCaches .pyc créés par l'interpréteur lors d'un import, et bibliothèques partagées issues de la compilation d'extensions C. *.py[codz] est un motif à crochets qui capture d'un coup .pyc, .pyo, .pyd et .pyz. Tous sont régénérés à partir des sources. |
build/dist/*.egg-info/*.eggwheels/sdist/MANIFEST | Artefacts de packagingFichiers de distribution et métadonnées produits par python -m build ou setuptools. Les résultats de publication sont destinés à un registre comme PyPI, pas au dépôt de sources. |
.venvvenv/env/ENV/__pypackages__/ | Environnements virtuelsIls contiennent en dur le chemin de l'interpréteur, ne fonctionnent donc pas une fois copiés sur une autre machine, et sont volumineux. Les dépendances se partagent via requirements.txt ou pyproject.toml et un lockfile. |
.pytest_cache/.tox/.nox/.coveragehtmlcov/coverage.xml.hypothesis/ | Caches de tests et de couvertureRésultats et caches laissés par les exécuteurs de tests et les outils de couverture. Ils changent à chaque exécution et ne doivent être traités que comme des artefacts de CI. |
.mypy_cache/.pyre/.pytype/.ruff_cache/ | Caches de vérification de types et de lintersCaches locaux destinés à accélérer l'analyse statique ; supprimés, ils sont recréés à l'exécution suivante. |
local_settings.pydb.sqlite3instance/.webassets-cachecelerybeat-schedule* | Données locales des frameworksRéglages locaux et base SQLite de développement de Django, dossier instance/ de Flask et fichier de planification de Celery beat. Leur contenu varie selon le développeur et ils contiennent facilement des valeurs secrètes. |
.env.envrc.pypirc.streamlit/secrets.toml | Informations secrètesFichiers de variables d'environnement, configuration direnv, .pypirc qui contient le jeton de publication PyPI, et secrets de Streamlit. Une fois commités, ils restent dans l'historique : il faut les exclure dès le départ. |
.ipynb_checkpointsprofile_default/ipython_config.py/sitedocs/_build/ | Notebooks et autres outilsPoints de contrôle Jupyter, profils IPython, et résultats de build de mkdocs (/site) et de Sphinx (docs/_build/). Comme /site commence par /, il ne désigne que le site situé à la racine du dépôt. |
Points d'attention en pratique
- Les règles
lib/etlib64/ignorent les répertoireslibà toute profondeur. Si du code front-end se trouve danssrc/lib/, remplacez la règle par/lib/ou ajoutez!src/lib/. - Le modèle ne mentionne
poetry.lock,uv.lock,pdm.locketPipfile.lockqu'en commentaire et ne les ignore pas. Pour une application, on les commite généralement afin de garantir des installations reproductibles. - Gardez en tête que
.venvn'a pas de/final : un fichier du même nom (par exemple un fichier de configuration d'outil indiquant le chemin de l'environnement virtuel) est lui aussi ignoré. - Les résultats d'exécution des notebooks Jupyter (cellules de sortie) ne peuvent pas être bloqués par gitignore. Pour commiter sans les sorties, utilisez un outil comme nbstripout.
Modèle d'origine
# Byte-compiled / optimized / DLL files__pycache__/*.py[codz]*$py.class# C extensions*.so# Distribution / packaging.Pythonbuild/develop-eggs/dist/downloads/eggs/.eggs/lib/lib64/parts/sdist/var/wheels/share/python-wheels/*.egg-info/.installed.cfg*.eggMANIFEST# PyInstaller# Usually these files are written by a python script from a template# before PyInstaller builds the exe, so as to inject date/other infos into it.*.manifest*.spec# Installer logspip-log.txtpip-delete-this-directory.txt# Unit test / coverage reportshtmlcov/.tox/.nox/.coverage.coverage.*.cachenosetests.xmlcoverage.xml*.cover*.py.cover*.lcov.hypothesis/.pytest_cache/cover/# Translations*.mo*.pot# Django stuff:*.loglocal_settings.pydb.sqlite3db.sqlite3-journal# Flask stuff:instance/.webassets-cache# Scrapy stuff:.scrapy# Sphinx documentationdocs/_build/# PyBuilder.pybuilder/target/# Jupyter Notebook.ipynb_checkpoints# IPythonprofile_default/ipython_config.py# pyenv# For a library or package, you might want to ignore these files since the code is# intended to run in multiple environments; otherwise, check them in:# .python-version# pipenv# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.# However, in case of collaboration, if having platform-specific dependencies or dependencies# having no cross-platform support, pipenv may install dependencies that don't work, or not# install all needed dependencies.# Pipfile.lock# UV# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.# This is especially recommended for binary packages to ensure reproducibility, and is more# commonly ignored for libraries.# uv.lock# poetry# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.# This is especially recommended for binary packages to ensure reproducibility, and is more# commonly ignored for libraries.# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control# poetry.lock# poetry.toml# pdm# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.# https://pdm-project.org/en/latest/usage/project/#working-with-version-control# pdm.lock# pdm.toml.pdm-python.pdm-build/# pixi# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.# pixi.lock# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one# in the .venv directory. It is recommended not to include this directory in version control..pixi/*!.pixi/config.toml# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm__pypackages__/# Celery stuffcelerybeat-schedule*celerybeat.pid# Redis*.rdb*.aof*.pid# RabbitMQmnesia/rabbitmq/rabbitmq-data/# ActiveMQactivemq-data/# SageMath parsed files*.sage.py# Environments.env.envrc.venvenv/venv/ENV/env.bak/venv.bak/# Spyder project settings.spyderproject.spyproject# Rope project settings.ropeproject# mkdocs documentation/site# mypy.mypy_cache/.dmypy.jsondmypy.json# Pyre type checker.pyre/# pytype static type analyzer.pytype/# Cython debug symbolscython_debug/# PyCharm# JetBrains specific template is maintained in a separate JetBrains.gitignore that can# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore# and can be added to the global gitignore or merged into this file. For a more nuclear# option (not recommended) you can uncomment the following to ignore the entire idea folder.# .idea/# Abstra# Abstra is an AI-powered process automation framework.# Ignore directories containing user credentials, local state, and settings.# Learn more at https://abstra.io/docs.abstra/# Visual Studio Code# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore that# can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore# and can be added to the global gitignore or merged into this file. However, if you prefer, you# could uncomment the following to ignore the entire vscode folder# .vscode/# Temporary file for partial code executiontempCodeRunnerFile.py# Ruff stuff:.ruff_cache/# PyPI configuration file.pypirc# Marimomarimo/_static/marimo/_lsp/__marimo__/# Streamlit.streamlit/secrets.toml
Source des modèles : github/gitignore/Python.gitignore @356fd7b (2026-09-11) · CC0-1.0