Python-.gitignore-Vorlage erklärt
Erklärt, warum Python.gitignore __pycache__, virtuelle Umgebungen, Packaging-Artefakte, Test- und Typprüfungs-Caches sowie geheime Konfigurationen ignoriert, und worauf bei lib/ und Lockfiles zu achten ist.
Python.gitignore ist eine große Vorlage, die für alles gedacht ist – vom reinen Python-Projekt über Django- und Flask-Webanwendungen und Data Science bis zur Paketveröffentlichung. Sie bündelt Bytecode-Caches, virtuelle Umgebungen, Packaging-Ordner von setup.py bzw. Build-Backends sowie Caches von Werkzeugen wie pytest, mypy oder ruff.
Bei so vielen Regeln werden auch Pfade erfasst, die man nicht beabsichtigt. Vor allem Verzeichnisse mit gängigen Namen wie lib/, build/, dist/ oder target/ werden unabhängig von der Tiefe ignoriert. In Repositorys mit mehreren Sprachen lohnt es sich, das Ergebnis einmal zu testen.
Regeln im Einzelnen
| Muster | Was ignoriert wird und warum |
|---|---|
__pycache__/*.py[codz]*$py.class*.so | Bytecode und Erweiterungsmodule.pyc-Caches, die der Interpreter beim Import anlegt, und gemeinsam genutzte Bibliotheken aus gebauten C-Erweiterungen. *.py[codz] ist ein Klammermuster, das .pyc, .pyo, .pyd und .pyz auf einmal erfasst. Alles davon wird aus den Quellen neu erzeugt. |
build/dist/*.egg-info/*.eggwheels/sdist/MANIFEST | Packaging-ArtefakteDistributionsdateien und Metadaten, die python -m build oder setuptools erzeugen. Veröffentlichungsergebnisse gehören in eine Registry wie PyPI, nicht ins Quell-Repository. |
.venvvenv/env/ENV/__pypackages__/ | Virtuelle UmgebungenSie enthalten fest eingetragene Interpreterpfade, funktionieren auf einem anderen Rechner daher nicht und sind groß. Abhängigkeiten werden über requirements.txt oder pyproject.toml und ein Lockfile geteilt. |
.pytest_cache/.tox/.nox/.coveragehtmlcov/coverage.xml.hypothesis/ | Test- und Coverage-CachesErgebnisse und Caches von Testrunnern und Coverage-Werkzeugen. Sie ändern sich bei jedem Lauf und sollten nur als CI-Artefakte behandelt werden. |
.mypy_cache/.pyre/.pytype/.ruff_cache/ | Typprüfungs- und Linter-CachesLokale Caches zur Beschleunigung der statischen Analyse; nach dem Löschen werden sie beim nächsten Lauf neu angelegt. |
local_settings.pydb.sqlite3instance/.webassets-cachecelerybeat-schedule* | Lokale Framework-DatenLokale Einstellungen und die SQLite-Entwicklungsdatenbank von Django, der instance/-Ordner von Flask und die Zeitplandatei von Celery beat. Ihr Inhalt ist je nach Entwickler verschieden und enthält leicht geheime Werte. |
.env.envrc.pypirc.streamlit/secrets.toml | Geheime InformationenUmgebungsvariablendateien, direnv-Konfiguration, .pypirc mit dem PyPI-Upload-Token und Streamlit-Secrets. Einmal committet, bleiben sie in der Historie – deshalb von Anfang an ausschließen. |
.ipynb_checkpointsprofile_default/ipython_config.py/sitedocs/_build/ | Notebooks und weitere ToolsJupyter-Checkpoints, IPython-Profile sowie Build-Ergebnisse von mkdocs (/site) und Sphinx (docs/_build/). Da /site mit / beginnt, bezeichnet es nur site im Stammverzeichnis des Repositorys. |
Hinweise für die Praxis
- Die Regeln
lib/undlib64/ignorierenlib-Verzeichnisse in jeder Tiefe. Liegt Frontend-Code insrc/lib/, ändern Sie die Regel in/lib/oder ergänzen Sie!src/lib/. - Die Vorlage erwähnt
poetry.lock,uv.lock,pdm.lockundPipfile.locknur in Kommentaren und ignoriert sie nicht. Bei Anwendungen werden sie für reproduzierbare Installationen üblicherweise committet. - Beachten Sie, dass
.venvkein abschließendes/hat und daher auch eine gleichnamige Datei ignoriert wird (etwa eine Tool-Konfigurationsdatei, die den Pfad der virtuellen Umgebung enthält). - Ausführungsergebnisse (Ausgabezellen) von Jupyter-Notebooks lassen sich mit gitignore nicht blockieren. Um ohne Ausgaben zu committen, verwenden Sie ein Werkzeug wie nbstripout.
Originalvorlage
# 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
Vorlagenquelle: github/gitignore/Python.gitignore @356fd7b (2026-09-11) · CC0-1.0