Best Practices zum Hinzufügen einer Gitignore-Datei für Python-Projekte? [geschlossen]

207

Ich versuche, einige meiner Standardeinstellungen zu erfassen, und mir wurde klar, dass ich keinen Standard für .gitignore-Dateien habe. Es gibt einen großartigen Thread, der einen guten Gitignore für Visual Studio-Projekte zeigt , aber ich sehe nicht viele Empfehlungen für Python und verwandte Tools (PyGTK, Django).

Bisher habe ich ...

*.pyc
*.pyo

... für die kompilierten Objekte und ...

build/
dist/

... für die setuptools-Ausgabe.

Was sind einige Best Practices für Gitignore-Dateien und wo kann ich mehr über diese Best Practices erfahren?

ewall
quelle
16
Dieses Projekt github.com/github/gitignore wurde eingerichtet, um genau diese Frage zu beantworten.
MatrixFrog
1
Vergessen Sie nicht, github.com/github/gitignore/blob/master/Python.gitignore hinzuzufügen, da es sich auch um ein Python-Projekt handelt.
Fábio Santos
1
Gehen Sie einfach zu gitignore.io und geben Sie python ein, um die Standarddatei zu erhalten.
Bhanu Sinha

Antworten:

63

Bei der Verwendung von Buildout habe ich Folgendes .gitignore(zusammen mit *.pyound *.pyc):

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

Vielen Dank an Jacob Kaplan-Moss

Außerdem neige ich dazu, mich einzumischen, .svnda wir dort, wo ich arbeite, mehrere SCMs verwenden.

Davor Lucic
quelle
35
Halten Sie ein SVN-Repo im selben Baum wie Ihr Git-Repo!? Was für ein Monster würde so etwas tun?
Daenyth
@Daenyth kichert , na ja , nicht wirklich, aber ich neige dazu, einige übrig gebliebene .svnVerzeichnisse zu finden, wenn ich eine Komponente von einer anderen Quelle bekomme (besonders bei älteren Komponenten) und ich bin auch ziemlich faul, so dass ich manchmal Kassen kopiere, anstatt Sachen aus SVN zu exportieren . Ich habe sogar einmal einen Typen gesehen, der tatsächlich übrig gebliebene .svn-Verzeichnisse in GIT begangen hat. Bei der Arbeit mit dummen Leuten kann man auf alle möglichen seltsamen Dinge stoßen.
Davor Lucic
1
Nun, ich versuche sie an StackOverflow zu binden ...: p
Davor Lucic
1
Ich habe Buildout noch nicht verwendet, werde es aber wahrscheinlich bald tun müssen ... also werde ich sie auf die Liste setzen. Vielen Dank!
Ewall
2
Sie sollten das wahrscheinlich *.svnin Ihre .global_gitignore, nicht in einzelne Projekte setzen.
Cowlicks
292

Github hat eine großartige Boilerplate .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/
Seanrose
quelle
1
Warum sollten wir * .mo-Dateien ignorieren? nur aus Neugier. Werden die .po-Dateien von gettext separat auf dem Server kompiliert?
Ekin Ertaç
4
.mo-Dateien sind die maschinenlesbare (binäre) Version der .po-Dateien, und - wie allgemein bekannt - ist es viel besser, Binärdateien außerhalb eines versionierten Repositorys zu halten, wenn Sie können (und sollten), da beide .po-Dateien enthalten sind und .mo bedeutet auch, doppelte Daten im Repository zu behalten, damit das VCS nicht einmal "
quetschen
5
Warum nicht .DS_Store?
MaxCore
Ich bin wirklich verwirrt, warum sie .python-versionin .gitignorehier: github.com/github/gitignore/blob/master/Python.gitignore#L82
aceofbassgreg
15

local_settings.py für Django-Projekte.

* ~ für alle Projekte.

Ofri Raviv
quelle
Das macht Sinn. Ich mag diese Methode, um die allgemeine Konfiguration von der spezifischen / lokalen / privaten zu trennen.
Ewall
Wie funktioniert das? Das heißt, woher wissen Django oder Python, wann die Umgebung lokal ist und wann sie produziert wird?
MadPhysicist
12

Deckt die meisten allgemeinen Dinge ab -

# 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/

Referenz: Python .gitignore

Ani Menon
quelle
Dies ist bereits oben erwähnt!
Emmanuel
@Emmanuel Was in der anderen Antwort erwähnt wird, ist kein generisches Boilerplate, es hat viele unnötige Dinge. Die hier erwähnten sind für jeden Django / Python generisch.
Ani Menon
Tut mir leid ... Leider kann ich meine Abstimmung nicht stornieren, bis die Antwort bearbeitet ist ...
Emmanuel
6

Eine Frage ist, ob Sie git auch für die Deplomentierung Ihrer Projekte verwenden möchten. Wenn dies der Fall ist, möchten Sie Ihre lokale SQLite-Datei wahrscheinlich aus dem Repository ausschließen. Dies gilt wahrscheinlich auch für das Hochladen von Dateien (meistens in Ihrem Medienordner). (Ich spreche jetzt über Django, da Ihre Frage auch mit Django markiert ist.)

Bernhard Vallant
quelle
Verstanden. Da Django einen Großteil des Dateinamens und der Verzeichnisstruktur nicht erzwingt, ist es schwierig, diese im Voraus anzugeben. Aber ich kann es mir zumindest notieren, damit ich mich erinnere, wann ich ein neues Projekt erstelle.
Ewall
Vermutlich sollten Sie es zumindest üblich machen, dass alle Benutzer Dateien in EINEM Ordner in Ihrem Medienverzeichnis hochgeladen haben, z. media/uploads, so können Sie sie alle mit einer Regel "ignorieren" ...
Bernhard Vallant
4

Hier sind einige andere Dateien, die von setuptools zurückgelassen werden können:

MANIFEST
*.egg-info
Nathanismus
quelle
Ich denke, ich könnte diese aus meiner Standardeinstellung herausnehmen, da einige meiner Projekte Setuptools-Distributionen haben, die sie benötigen würden. Aber für Plugins und so ja.
Ewall