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.