github/gitignore · Python.gitignore

Plantilla .gitignore de Python explicada

Explica por qué Python.gitignore ignora __pycache__, entornos virtuales, artefactos de empaquetado, cachés de pruebas y de comprobación de tipos y configuraciones secretas, y las precauciones sobre lib/ y los lockfiles.

Abrir en el generador Abrir junto con JupyterNotebooks, macOS, VisualStudioCode, JetBrains

Python.gitignore es una plantilla grande pensada para todo tipo de uso: desde proyectos de Python puro hasta aplicaciones web con Django o Flask, ciencia de datos y distribución de paquetes. Reúne en un solo lugar la caché de bytecode, los entornos virtuales, las carpetas de empaquetado que crean setup.py y los backends de compilación, y las cachés de herramientas como pytest, mypy y ruff.

Con tantas reglas, algunas rutas quedan atrapadas sin querer. En particular, ignora a cualquier profundidad directorios con nombres comunes como lib/, build/, dist/ y target/, así que en repositorios mezclados con otros lenguajes conviene probar el resultado una vez.

Explicación regla por regla

PatrónQué ignora y por qué
__pycache__/*.py[codz]*$py.class*.soBytecode y módulos de extensiónSon la caché .pyc que crea el intérprete al importar y las bibliotecas compartidas compiladas a partir de extensiones en C. *.py[codz] es un patrón con corchetes que captura .pyc, .pyo, .pyd y .pyz de una vez. Todo se regenera a partir del código fuente.
build/dist/*.egg-info/*.eggwheels/sdist/MANIFESTArtefactos de empaquetadoSon los archivos de distribución y metadatos que generan python -m build o setuptools. Los resultados de distribución se suben a registros como PyPI; no son algo para meter en el repositorio de código.
.venvvenv/env/ENV/__pypackages__/Entornos virtualesLlevan fijada la ruta del intérprete, así que no funcionan si se trasladan a otro equipo, y además ocupan mucho. Las dependencias se comparten con requirements.txt o pyproject.toml y un lockfile.
.pytest_cache/.tox/.nox/.coveragehtmlcov/coverage.xml.hypothesis/Cachés de pruebas y coberturaSon resultados y cachés que dejan los ejecutores de pruebas y las herramientas de cobertura. Cambian en cada ejecución, así que se tratan solo como artefactos de CI.
.mypy_cache/.pyre/.pytype/.ruff_cache/Cachés de comprobación de tipos y lintersSon cachés locales para acelerar el análisis estático; si se borran, se recrean en la siguiente ejecución.
local_settings.pydb.sqlite3instance/.webassets-cachecelerybeat-schedule*Datos locales de frameworksSon la configuración local y la base de datos SQLite de desarrollo de Django, la carpeta instance/ de Flask y el archivo de planificación de Celery beat. Su contenido varía según el desarrollador y es fácil que acaben conteniendo valores secretos.
.env.envrc.pypirc.streamlit/secrets.tomlInformación secretaSon los archivos de variables de entorno, la configuración de direnv, .pypirc con el token de subida a PyPI y los secretos de Streamlit. Una vez confirmados quedan en el historial, así que se excluyen desde el principio.
.ipynb_checkpointsprofile_default/ipython_config.py/sitedocs/_build/Notebooks y otras herramientasSon los checkpoints de Jupyter, el perfil de IPython y los resultados de compilación de mkdocs (/site) y Sphinx (docs/_build/). /site lleva / delante, así que solo apunta a site en la raíz del repositorio.

Precauciones en la práctica

Plantilla original

Python.gitignore96 líneas de reglas
# 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

Origen de las plantillas: github/gitignore/Python.gitignore @356fd7b (2026-09-11) · CC0-1.0

Plantillas que suelen usarse juntas

Otras plantillas explicadas