Práticas recomendadas para adicionar o arquivo .gitignore para projetos Python? [fechadas]

209

Estou tentando coletar algumas das minhas configurações padrão e percebi que não tenho um padrão para arquivos .gitignore. Há um ótimo thread mostrando um bom .gitignore para projetos do Visual Studio , mas não vejo muitas recomendações para Python e ferramentas relacionadas (PyGTK, Django).

Até agora, eu tenho ...

*.pyc
*.pyo

... para os objetos compilados e ...

build/
dist/

... para a saída do setuptools.

Quais são algumas das práticas recomendadas para arquivos .gitignore e onde posso obter mais informações sobre essas práticas recomendadas?

ewall
fonte
16
Este projeto github.com/github/gitignore foi configurado para responder exatamente a esta pergunta.
MatrixFrog
1
.. Apenas não esqueça de adicionar github.com/github/gitignore/blob/master/Python.gitignore, já que também é um projeto python.
Fábio Santos
1
apenas gitignore.io Goto e tipo python para obter o arquivo padrão,
Bhanu Sinha

Respostas:

64

Ao usar o buildout , tenho os seguintes itens.gitignore (junto com *.pyoe *.pyc):

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

Agradecimentos a Jacob Kaplan-Moss

Também costumo usar .svn, já que usamos vários SCM-s onde trabalho.

Davor Lucic
fonte
35
Manter um repositório svn na mesma árvore que o seu repositório git !? Que tipo de monstro faria uma coisa dessas?
Daenyth
@Daenyth rir , bem, não realmente, mas tendem a encontrar algumas sobras .svndiretórios em torno de mentir se eu conseguir um componente de outra fonte (especialmente em componentes mais antigos) e também estou bastante preguiçoso assim eu às vezes copiar checkouts em vez de exportar material do SVN . Certa vez, vi um cara cometendo sobras .svn dirs no GIT. Você pode encontrar todo tipo de coisas estranhas ao trabalhar com pessoas tolas.
Davor Lucic
1
Bem, eu estou tentando conectá-los no StackOverflow ...: p #
Davor Lucic
1
Ainda não usei o Buildout, mas provavelmente precisará algum dia em breve ... então vou colocá-los na lista. Obrigado!
eWall
2
Você provavelmente deve colocar o *.svnseu no .global_gitignore, não em projetos individuais.
cowlicks
293

O Github tem um ótimo clichê .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
fonte
1
por que devemos ignorar os arquivos * .mo? só por curiosidade. esses arquivos .po do gettext são compilados no servidor separadamente?
Ekin Ertaç
4
Os arquivos .mo são a versão legível por máquina (binária) dos arquivos .po e, como é sabido, é muito melhor manter os arquivos binários fora de um repositório com versão, quando você pode (e deve, desde que inclua os dois .po e .mo meios também manter dados duplicados no repositório, que o VCS não pode mesmo "abóbora")
dappiu
5
Por que não .DS_Store?
MaxCore
Estou muito confuso a respeito de porque eles têm .python-versionem .gitignoreaqui: github.com/github/gitignore/blob/master/Python.gitignore#L82
aceofbassgreg
16

local_settings.py , para projetos de django.

* ~ para todos os projetos.

Ofri Raviv
fonte
Isso faz sentido. Eu gosto deste método de separar a configuração geral do específico / local / privado.
eWall
Como é que isso funciona? Ou seja, como o Django ou Python sabe quando o ambiente é local e quando é produção?
21817 MadPhysicist
13

Abrange a maior parte do material geral -

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

Referência: python .gitignore

Ani Menon
fonte
Isso já foi mencionado acima!
Emmanuel
@Emmanuel O que é mencionado na outra resposta não é um padrão genérico, ele tem muitas coisas desnecessárias. O mencionado aqui é para qualquer Django / python genericamente.
Ani Menon
Na verdade, muito por isso ... Infelizmente eu não posso cancelar meu downvote até resposta é editado ...
Emmanuel
6

Uma pergunta é se você também deseja usar o git para o esgotamento de seus projetos. Nesse caso, você provavelmente gostaria de excluir o arquivo sqlite local do repositório, o mesmo provavelmente se aplica aos uploads de arquivos (principalmente na sua pasta de mídia). (Estou falando de django agora, já que sua pergunta também está marcada com django)

Bernhard Vallant
fonte
Entendido. Como o Django não aplica muito o nome de um arquivo e a estrutura de diretórios, é difícil especificá-los com antecedência. Mas pelo menos posso fazer uma anotação, para me lembrar quando estou criando um novo projeto.
eWall
Bem, acho que você deve pelo menos tornar comum o upload de todos os arquivos de seu usuário em UMA pasta no diretório de mídia, por exemplo. media/uploads, Assim você pode 'ignorar' a todos com uma regra ...
Bernhard Vallant
4

Aqui estão alguns outros arquivos que podem ser deixados para trás pelo setuptools:

MANIFEST
*.egg-info
jathanism
fonte
Acho que posso deixar isso fora do meu padrão, porque alguns dos meus projetos têm distribuições de ferramentas de instalação que precisariam deles. Mas para plugins e tal, sim.
eWall