Le migliori pratiche per l'aggiunta di file .gitignore per i progetti Python? [chiuso]


209

Sto provando a raccogliere alcune delle mie impostazioni predefinite e una cosa per la quale mi sono reso conto che non ho uno standard per i file .gitignore. C'è un ottimo thread che mostra un buon .gitignore per i progetti di Visual Studio , ma non vedo molti consigli per Python e strumenti correlati (PyGTK, Django).

Finora ho ...

*.pyc
*.pyo

... per gli oggetti compilati e ...

build/
dist/

... per l'output di setuptools.

Quali sono alcune best practice per i file .gitignore e dove posso trovare ulteriori informazioni su queste best practice?


16
Questo progetto github.com/github/gitignore è stato creato per rispondere esattamente a questa domanda.
MatrixFrog,

1
.. Non dimenticare di aggiungere github.com/github/gitignore/blob/master/Python.gitignore poiché è anche un progetto Python.
Fábio Santos,

1
basta andare su gitignore.io e digitare python per ottenere il file standard,
Bhanu Sinha

Risposte:


64

Quando utilizzo buildout ho seguito .gitignore(insieme a *.pyoe *.pyc):

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

Grazie a Jacob Kaplan-Moss

Inoltre tendo a inserirmi .svnpoiché usiamo diversi SCM-s dove lavoro.


35
Mantenere un repository svn nello stesso albero del repository git !? Che tipo di mostro farebbe una cosa del genere?
Daenyth,

@Daenyth risatina , beh non proprio, ma tendo a trovare alcune .svndirectory rimanenti in giro se ottengo un componente da un'altra fonte (specialmente in componenti più vecchi) e anche io sono abbastanza pigro, quindi a volte copio i checkout invece di esportare cose da SVN . Una volta ho persino visto un tizio che si stava effettivamente impegnando in avanzi .svn dirs in GIT. Puoi imbatterti in cose strane quando lavori con persone stupide.
Assapora Lucic il

1
Beh, sto cercando di agganciarli su StackOverflow ...: p
Davor Lucic,

1
Non ho ancora usato Buildout, ma probabilmente dovrò farlo presto ... quindi li inserirò nell'elenco. Grazie!
ewall,

2
Probabilmente dovresti metterlo *.svnnel tuo .global_gitignore, non in singoli progetti.
Cowlicks,

293

Github ha un'ottima piastra di cottura .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
perché dovremmo ignorare i file * .mo? solo per curiosità. quei file .po di gettext sono compilati sul server separatamente?
Ekin Ertaç,

4
I file .mo sono la versione (binaria) leggibile dal computer dei file .po e, come è noto, è molto meglio tenere i file binari al di fuori di un repository con versione, quando è possibile (e si dovrebbe, dal momento che includendo entrambi .po e .mo mezzi anche mantenere i dati duplicati nel repository, che la VCS non può nemmeno "zucca")
dappiu

5
Perché no .DS_Store?
MaxCore,

Sono davvero confusa sul motivo per cui essi hanno .python-versionin .gitignorequi: github.com/github/gitignore/blob/master/Python.gitignore#L82
aceofbassgreg

16

local_settings.py , per progetti django.

* ~ per tutti i progetti.


Questo ha senso. Mi piace questo metodo per separare la configurazione generale da specifica / locale / privata.
ewall,

Come funziona? Cioè, come fa Django o Python a sapere quando l'ambiente è locale e quando è di produzione?
MadPhysicist,

13

Copre la maggior parte delle cose generali -

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

Riferimento: python .gitignore


Questo è già menzionato sopra!
Emmanuel,

@Emmanuel Ciò che è menzionato nell'altra risposta non è una piastra generica, ha molte cose inutili. Quelli menzionati qui sono genericamente per qualsiasi Django / Python.
Ani Menon,

In effetti, scusami per quello ... Purtroppo non posso cancellare il mio voto negativo fino a quando la risposta non sarà modificata ...
Emmanuel,

6

Una domanda è se vuoi anche usare git per il deploment dei tuoi progetti. Se è così, probabilmente vorresti escludere il tuo file sqlite locale dal repository, lo stesso vale probabilmente per i caricamenti di file (principalmente nella tua cartella multimediale). (Sto parlando di Django ora, poiché la tua domanda è anche taggata con Django)


Inteso. Poiché Django non impone gran parte del nome di un file e della struttura di directory, è difficile specificarli in anticipo. Ma posso almeno prenderne nota così mi ricordo quando sto creando un nuovo progetto.
ewall,

Bene, suppongo che dovresti almeno rendere comune avere tutti i tuoi file caricati dall'utente in una cartella nella tua directory multimediale, ad es. media/uploads, quindi puoi "ignorarli" tutti con una regola ...
Bernhard Vallant,

4

Ecco alcuni altri file che possono essere lasciati alle spalle da setuptools:

MANIFEST
*.egg-info

Penso che potrei lasciarli fuori dal mio default, perché alcuni dei miei progetti hanno distribuzioni di setuptools che avrebbero bisogno di loro. Ma per plugin e simili, sì.
ewall,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.