¿Mejores prácticas para agregar un archivo .gitignore para proyectos de Python? [cerrado]

209

Estoy tratando de recopilar algunas de mis configuraciones predeterminadas, y una cosa que me di cuenta de que no tengo un estándar para los archivos .gitignore. Hay un excelente hilo que muestra un buen .gitignore para proyectos de Visual Studio , pero no veo muchas recomendaciones para Python y herramientas relacionadas (PyGTK, Django).

Hasta ahora, tengo ...

*.pyc
*.pyo

... para los objetos compilados y ...

build/
dist/

... para la salida de setuptools.

¿Cuáles son algunas de las mejores prácticas para los archivos .gitignore y dónde puedo obtener más información sobre estas mejores prácticas?

ewall
fuente
16
Este proyecto github.com/github/gitignore se configuró para responder exactamente esta pregunta.
MatrixFrog
1
.. Simplemente no olvides agregar github.com/github/gitignore/blob/master/Python.gitignore ya que también es un proyecto de Python.
Fábio Santos
1
simplemente vaya a gitignore.io y escriba python para obtener el archivo estándar,
Bhanu Sinha

Respuestas:

64

Cuando uso buildout tengo siguiente .gitignore(junto con *.pyoy *.pyc):

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

Gracias a Jacob Kaplan-Moss

También tiendo a poner .svnya que utilizamos varios SCM-s donde trabajo.

Davor Lucic
fuente
35
¿Mantener un repositorio svn en el mismo árbol que su repositorio git? ¿Qué tipo de monstruo haría tal cosa?
Daenyth
@Daenyth risa , bueno en realidad no, pero tiendo a encontrar algunos restos de .svndirectorios por ahí si consigo un componente de otra fuente (especialmente en los componentes de edad), así que estoy bastante vago, así que a veces copio las cajas en lugar de la exportación de material desde SVN . Incluso una vez vi a un chico realmente cometiendo sobras de directorios .svn en GIT. Puedes toparte con todo tipo de cosas raras cuando trabajas con personas tontas.
Davor Lucic
1
Bueno, estoy tratando de engancharlos en StackOverflow ...: p
Davor Lucic
1
Todavía no he usado Buildout, pero probablemente lo necesite algún día pronto ... así que los pondré en la lista. ¡Gracias!
ewall
2
Probablemente deberías ponerlo *.svnen tu .global_gitignore, no en proyectos individuales.
cowlicks
293

Github tiene un gran repetitivo .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
fuente
1
¿Por qué debemos ignorar los archivos * .mo? solamente por curiosidad. ¿Se compilan esos archivos .po de gettext en el servidor por separado?
Ekin Ertaç
44
Los archivos .mo son la versión legible por máquina (binaria) de los archivos .po y, como se sabe, es mucho mejor mantener los archivos binarios fuera de un repositorio versionado, cuando puede (y debe hacerlo, ya que incluye ambos .po y .mo significa también mantener datos duplicados en el repositorio, que el VCS ni siquiera puede "aplastar")
dappiu
55
¿Por qué no .DS_Store?
MaxCore
Estoy muy confundido en cuanto a por qué tienen .python-versionen .gitignoreaquí: github.com/github/gitignore/blob/master/Python.gitignore#L82
aceofbassgreg
16

local_settings.py , para proyectos de django.

* ~ para todos los proyectos.

Ofri Raviv
fuente
Eso tiene sentido. Me gusta este método de separar la configuración general de la específica / local / privada.
ewall
¿Como funciona esto? Es decir, ¿cómo sabe Django o Python cuándo el entorno es local y cuándo es producción?
MadPhysicist
13

Cubre la mayoría de las cosas generales:

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

Referencia: python .gitignore

Ani Menon
fuente
Esto ya se mencionó anteriormente!
Emmanuel
@Emmanuel Lo que se menciona en la otra respuesta no es una plantilla genérica, tiene muchas cosas innecesarias. Los mencionados aquí son para cualquier Django / python genéricamente.
Ani Menon
De hecho, perdón por eso ... Desafortunadamente no puedo cancelar mi voto negativo hasta que se edite la respuesta ...
Emmanuel
6

Una pregunta es si también desea usar git para el desarrollo de sus proyectos. Si es así, probablemente desee excluir su archivo sqlite local del repositorio, lo mismo se aplica probablemente a las cargas de archivos (principalmente en su carpeta de medios). (Estoy hablando de django ahora, ya que su pregunta también está etiquetada con django)

Bernhard Vallant
fuente
Entendido. Como Django no exige mucho nombre de archivo y estructura de directorios, es difícil especificarlos de antemano. Pero al menos puedo tomar nota de ello, así que recuerdo cuando estoy creando un nuevo proyecto.
ewall
Bueno, supongo que al menos debería hacer que sea común que todos sus usuarios carguen archivos en UNA carpeta en su directorio multimedia, por ejemplo. media/uploads, así que puedes 'ignorarlos' con una sola regla ...
Bernhard Vallant
4

Aquí hay algunos otros archivos que las herramientas de configuración pueden dejar atrás:

MANIFEST
*.egg-info
jathanism
fuente
Creo que podría dejarlos fuera de mi configuración predeterminada, porque algunos de mis proyectos tienen distribuciones de herramientas de configuración que los necesitarían. Pero para complementos y tal, sí.
ewall