为Python项目添加.gitignore文件的最佳做法?[关闭]


209

我正在尝试收集一些默认设置,而我意识到我没有标准的一件事是.gitignore文件。有一个很棒的线程显示了适用于Visual Studio项目的.gitignore,但是我没有看到很多关于Python和相关工具(PyGTK,Django)的建议。

到目前为止,我有...

*.pyc
*.pyo

对于已编译的对象

build/
dist/

...用于setuptools输出。

.gitignore文件有哪些最佳实践,我可以在哪里获得更多关于这些最佳实践的信息?


16
这个项目github.com/github/gitignore的设置就是为了回答这个问题。
MatrixFrog 2010年

1
..只是不要忘记添加github.com/github/gitignore/blob/master/Python.gitignore,因为它也是一个python项目。
法比奥·桑托斯

1
只需转到gitignore.io并键入python即可获取标准文件,
Bhanu Sinha

Answers:


64

当使用buildout时,我在.gitignore(以及*.pyo和中*.pyc)有以下内容:

.installed.cfg
bin
develop-eggs
dist
downloads
eggs
parts
src/*.egg-info
lib
lib64

感谢Jacob Kaplan-Moss

我也倾向于加入.svn,因为我们在工作的地方使用了多个SCM。


35
将svn仓库与git仓库保存在同一棵树中!?什么样的怪物会做这种事情?
2010年

@Daenyth 咯咯地笑,不是真的,但是.svn如果我从另一个来源(特别是在较旧的组件中)得到一个组件,我倾向于找到一些剩余的目录,而且我也很懒,所以我有时会复制结帐而不是从SVN中导出内容。我什至曾经看到一个人实际上在GIT中提交了剩余的.svn dirs。与愚蠢的人一起工作时,您可能会遇到各种奇怪的事情。
达沃·卢西奇

1
好吧,我试图将它们挂在StackOverflow上...:p
Davor Lucic 2010年

1
我尚未使用Buildout,但可能很快就会需要……所以我将它们列在清单上。谢谢!
ewall

2
您可能应该将放在*.svn您的中 .global_gitignore,而不是放在单个项目中。
Cowlicks '16

293

Github有一个很棒的样板.gitignore

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]

# C extensions
*.so

# Distribution / packaging
bin/
build/
develop-eggs/
dist/
eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
.tox/
.coverage
.cache
nosetests.xml
coverage.xml

# Translations
*.mo

# Mr Developer
.mr.developer.cfg
.project
.pydevproject

# Rope
.ropeproject

# Django stuff:
*.log
*.pot

# Sphinx documentation
docs/_build/

1
为什么我们应该忽略* .mo文件?只是出于好奇。这些gettext的.po文件是否分别在服务器上编译?
EkinErtaç16年

4
.mo文件是.po文件的机器可读(二进制)版本,并且-众所周知-在可能的情况下(并且应该,因为同时包含.po和.mo也意味着将重复的数据保留在存储库中,VCS甚至无法“压扁”)
dappiu

5
为什么不使用.DS_Store?
MaxCore

我真的很困惑他们为什么会.python-version.gitignore这里: github.com/github/gitignore/blob/master/Python.gitignore#L82
aceofbassgreg


13

涵盖了大多数常规内容-

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

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

# 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 logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

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

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

参考:python .gitignore


上面已经提到了!
伊曼纽尔

@Emmanuel在另一个答案中提到的不是通用的样板,它有许多不必要的东西。这里提到的是针对所有Django / python的。
阿妮·梅农

的确,对此感到抱歉。不幸的是,直到对答案进行编辑之前,我无法取消我的不赞成投票……
伊曼纽尔

6

一个问题是您是否还想使用git来部署项目。如果是这样,则您可能希望从存储库中排除本地sqlite文件,这同样适用于文件上传(主要是在您的媒体文件夹中)。(我现在正在谈论django,因为您的问题也被标记为django)


明白了 由于Django并没有执行太多的文件名和目录结构,因此很难预先指定它们。但是我至少可以记下它,因此我记得创建新项目时。
ewall

好吧,猜测,至少应该让所有用户都将文件上载到媒体目录的ONE文件夹中,这很普遍。media/uploads,因此您可以使用一条规则“忽略”所有规则...
Bernhard Vallant 2010年

4

这是setuptools可能遗留下来的一些其他文件:

MANIFEST
*.egg-info

我想我可能会将这些设置排除在默认设置之外,因为我的某些项目具有需要'em的setuptools发行版。但是对于插件之类的,是的。
ewall
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.