Разбор шаблона .gitignore для Python
Почему Python.gitignore игнорирует __pycache__, виртуальные окружения, артефакты упаковки, кэши тестов и проверки типов и секретные настройки, и что учесть с lib/ и lockfile.
Python.gitignore — большой шаблон, рассчитанный на всё: от чистых Python-проектов до веб-приложений на Django и Flask, data science и публикации пакетов. В нём собраны кэш байт-кода, виртуальные окружения, папки упаковки, которые создают setup.py и бэкенды сборки, а также кэши таких инструментов, как pytest, mypy и ruff.
Правил много, поэтому под них попадают и пути, которые вы не собирались игнорировать. В частности, каталоги с распространёнными именами — lib/, build/, dist/, target/ — игнорируются на любой глубине, так что в репозиториях, где смешаны разные языки, результат стоит один раз проверить.
Разбор правил
| Шаблон | Что и почему игнорируется |
|---|---|
__pycache__/*.py[codz]*$py.class*.so | Байт-код и модули расширенийКэш .pyc, который интерпретатор создаёт при import, и разделяемые библиотеки, собранные из C-расширений. *.py[codz] — шаблон со скобками, который охватывает сразу .pyc, .pyo, .pyd и .pyz. Всё это заново создаётся из исходников. |
build/dist/*.egg-info/*.eggwheels/sdist/MANIFEST | Артефакты упаковкиФайлы дистрибутива и метаданные, которые создают python -m build или setuptools. Результат сборки публикуется в репозитории пакетов вроде PyPI, а не хранится в репозитории исходного кода. |
.venvvenv/env/ENV/__pypackages__/ | Виртуальные окруженияВ них зашит путь к интерпретатору, поэтому на другом компьютере они не работают, да и весят много. Зависимости передаются через requirements.txt или pyproject.toml вместе с lockfile. |
.pytest_cache/.tox/.nox/.coveragehtmlcov/coverage.xml.hypothesis/ | Кэши тестов и покрытияРезультаты и кэши, которые оставляют запускатели тестов и инструменты покрытия. Они меняются при каждом запуске, поэтому их рассматривают только как артефакты CI. |
.mypy_cache/.pyre/.pytype/.ruff_cache/ | Кэши проверки типов и линтеровЛокальные кэши для ускорения статического анализа; если их удалить, они создадутся при следующем запуске. |
local_settings.pydb.sqlite3instance/.webassets-cachecelerybeat-schedule* | Локальные данные фреймворковЛокальные настройки Django и SQLite-база для разработки, папка instance/ во Flask, файл расписания Celery beat. У каждого разработчика они свои, и в них легко попадают секретные значения. |
.env.envrc.pypirc.streamlit/secrets.toml | Секретные данныеФайлы переменных окружения, настройки direnv, .pypirc с токеном загрузки в PyPI, секретные настройки Streamlit. Однажды закоммиченные, они останутся в истории, поэтому их исключают с самого начала. |
.ipynb_checkpointsprofile_default/ipython_config.py/sitedocs/_build/ | Блокноты и прочие инструментыКонтрольные точки Jupyter, профили IPython, результаты сборки mkdocs (/site) и Sphinx (docs/_build/). У /site в начале стоит /, поэтому правило указывает только на site в корне репозитория. |
На что обратить внимание на практике
- Правила
lib/иlib64/игнорируют каталогиlibна любой глубине. Если фронтенд-код лежит вsrc/lib/, замените правило на/lib/или добавьте!src/lib/. - Шаблон лишь упоминает в комментариях
poetry.lock,uv.lock,pdm.lockиPipfile.lockи не игнорирует их. Для приложений их обычно коммитят ради воспроизводимой установки. - Помните, что у
.venvнет/в конце, поэтому игнорируется и файл с таким именем (например, файл настроек инструмента, где записан путь к виртуальному окружению). - Результаты выполнения в блокнотах Jupyter (ячейки вывода) нельзя отсечь через gitignore. Чтобы коммитить без вывода, используйте инструменты вроде nbstripout.
Исходный шаблон
# 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
Источник шаблонов: github/gitignore/Python.gitignore @356fd7b (2026-09-11) · CC0-1.0