菜单

Python

相关源文件

本文档介绍了 GitHub gitignore 仓库中包含的 Python 特定的 gitignore 模式。它解释了在 Python 项目中通常应排除在版本控制之外的文件和目录,以及为什么。有关与语言无关的 gitignore 模式的信息,请参阅 gitignore 模板概述。有关 Python 特定 IDE 设置的信息,请参阅 JetBrains IDE(针对 PyCharm)或 Visual Studio 和 .NET(针对 PTVS)。

Python.gitignore 的目的

Python gitignore 模板提供了一套全面的模式,旨在将 Python 特定的生成文件、临时数据、构建产物和特定于环境的配置排除在版本控制之外。这有助于维护干净的仓库,防止团队成员之间的环境冲突,并避免不必要的仓库过大。

来源:Python.gitignore1-175

被忽略文件的类别

Python 开发会生成各种不应纳入版本控制的文件。这些文件可分为几类:

字节码和编译产物

Python 在脚本执行时会自动生成字节码文件,以提高后续运行的性能。这些文件特定于平台,不应提交。

__pycache__/
*.py[cod]
*$py.class
*.so
  • __pycache__/ 目录包含 Python 3.x 创建的字节码文件。
  • *.py[cod] 匹配 .pyc.pyo.pyd 字节码文件。
  • *$py.class 是 Jython 生成的编译文件。
  • *.so 文件是为特定平台编译的 C 扩展模块。

来源:Python.gitignore1-7

分发和打包

Python 项目在准备部署或发布到 PyPI 等包仓库时,通常会生成分发文件。这些构建产物应被排除。

.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

本节涵盖了构建分发包时由 setuptools、pip 和其他打包工具创建的目录和文件。

来源:Python.gitignore9-27

PyInstaller 产物

使用 PyInstaller 创建独立可执行文件时,会生成几个不应包含在版本控制中的文件。

*.manifest
*.spec

这些文件是在创建独立可执行文件的构建过程中由 PyInstaller 生成的。

来源:Python.gitignore29-34

测试和覆盖率报告

Python 项目通常使用各种测试框架和代码覆盖率工具,这些工具会生成报告和临时文件。

htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

这些模式会排除由 pytest、nose、coverage.py、tox、nox 和 hypothesis 等测试工具生成的文件。

来源:Python.gitignore39-53

虚拟环境和依赖项

Python 项目通常使用虚拟环境来隔离依赖项。这些应被排除在版本控制之外。

.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

本节还包括了 pipenv、poetry、pdm 和 UV 等各种依赖项管理工具的模式。

#Pipfile.lock
#uv.lock
#poetry.lock
#pdm.lock
.pdm.toml
.pdm-python
.pdm-build/
__pypackages__/

请注意,有些锁文件被注释掉了,因为有时建议将其包含在版本控制中以实现可重现性。

来源:Python.gitignore85-138 Python.gitignore95-122

框架特定文件

各种 Python 框架会生成应被排除的文件。

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Celery stuff
celerybeat-schedule
celerybeat.pid

这些模式会排除流行 Python 框架的数据库文件、本地设置、缓存和运行时文件。

来源:Python.gitignore58-126

文档、IDE 和工具

文档生成器、IDE 和其他 Python 工具会创建应被排除的文件。

# Sphinx documentation
docs/_build/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# Type checkers
.mypy_cache/
.dmypy.json
dmypy.json
.pyre/
.pytype/

# Linters
.ruff_cache/

来源:Python.gitignore71-171

Python 开发工作流程和 Gitignore 模式

下图说明了 Python 开发中不同阶段生成的文件应如何从版本控制中排除。

Python 开发工作流程和生成的文件

来源:Python.gitignore1-175

包管理工具及其 Gitignore 模式

Python 有几种包管理工具,每种工具都有应从版本控制中排除的特定文件。

Python 包管理器和相关 Gitignore 模式

来源:Python.gitignore90-118

Python 字节码和编译过程

Python 的编译过程会创建几种应从版本控制中排除的文件类型。

文件扩展名描述排除原因
.pyc已编译的 Python 文件(Python 2.x 风格)特定于平台,自动生成
.pyo优化的已编译 Python 文件特定于平台,自动生成
.pydPython DLL 文件(Windows)特定于平台的二进制文件
__pycache__/包含字节码文件的目录(Python 3.x)特定于平台和版本,自动重新生成
*.so共享对象文件(C 扩展)特定于平台的二进制文件
*$py.classJython 编译文件特定于平台,自动生成

来源:Python.gitignore1-7

环境和配置管理

Python 项目经常使用可能包含敏感信息的环境变量和配置文件。

文件/目录目的排除理由
.env环境变量包含敏感数据(API 密钥、密码)
.venv/env/venv/虚拟环境目录庞大、特定于机器、易于重新创建
local_settings.pyDjango 本地设置包含本地开发的敏感配置
.python-versionpyenv 配置特定于环境,默认注释
.pypircPyPI 配置包含身份验证凭据

来源:Python.gitignore130-138 Python.gitignore173-174

测试、文档和开发工具

Python 开发者使用各种工具生成应被排除的文件。

工具类别生成的代码目的
测试.pytest_cache/.tox/.nox/.coverage测试执行产物
文档docs/_build/*.mo*.pot生成的文档和翻译文件
集成开发环境 (IDE).spyderproject.spyproject.ropeprojectIDE 特定项目文件
类型检查.mypy_cache/.pyre/.pytype/类型检查器缓存文件
代码 Linting.ruff_cache/Ruff linter 缓存
Notebooks.ipynb_checkpointsJupyter Notebook 检查点

来源:Python.gitignore39-171

与 Web 框架的集成

Python Web 框架会生成应从版本控制中排除的特定文件。

框架被忽略的文件/目录目的
Djangodb.sqlite3db.sqlite3-journallocal_settings.py数据库文件和本地配置
Flaskinstance/.webassets-cache实例特定配置和资源编译
Scrapy.scrapyScrapy 缓存和运行时文件
Celerycelerybeat-schedulecelerybeat.pid任务调度器状态文件

来源:Python.gitignore58-69 Python.gitignore123-126

Python 包分发产物

在构建用于分发的 Python 包时,会创建几个应被排除的文件和目录。

文件/目录目的创建者
dist/包含已构建的分发包setuptools, build
build/临时构建目录setuptools, build
*.egg-info/已安装包的元数据setuptools
*.eggEgg 格式分发包setuptools (旧版)
MANIFEST源分发包的文件列表setuptools
wheels/已构建的 wheel 包wheel

来源:Python.gitignore9-27

Python Gitignore 最佳实践

  1. 尽早将 .gitignore 包含在项目中,以防止意外提交生成的文件。
  2. 考虑要包含哪些锁文件 - 建议包含某些依赖项锁文件(poetry.lock, Pipfile.lock)以实现可重现性。
  3. 使用环境变量处理敏感信息,而不是使用配置文件。
  4. 在忽略模式中要具体,以避免意外排除源代码或重要文件。
  5. 与全局 gitignore 模式结合使用以忽略编辑器特定的文件(请参阅 JetBrains IDE 获取 PyCharm 特定模式)。

来源:Python.gitignore86-108

如果您将 Python 与特定技术一起使用,请考虑将此模板与以下内容结合使用:

  • Django:对于 Python.gitignore 中未包含的基本模式之外的 Django 特定模式。
  • Flask:对于 Python.gitignore 中未包含的基本模式之外的 Flask 特定模式。
  • JupyterNotebooks:更全面的 Jupyter notebook 模式。
  • VisualStudio:用于 Visual Studio 的 Python 工具(PTVS)。

来源: Python.gitignore163-168 VisualStudio.gitignore329-330