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?


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.


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/

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.


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


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)


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.