Meilleures pratiques pour ajouter un fichier .gitignore pour les projets Python? [fermé]


209

J'essaie de collecter certains de mes paramètres par défaut, et une chose que j'ai réalisé que je n'ai pas de norme pour les fichiers .gitignore. Il y a un excellent fil qui montre un bon .gitignore pour les projets Visual Studio , mais je ne vois pas beaucoup de recommandations pour Python et les outils associés (PyGTK, Django).

Jusqu'à présent, j'ai ...

*.pyc
*.pyo

... pour les objets compilés et ...

build/
dist/

... pour la sortie setuptools.

Quelles sont les meilleures pratiques pour les fichiers .gitignore, et où puis-je aller pour en savoir plus sur ces meilleures pratiques?


16
Ce projet github.com/github/gitignore a été mis en place pour répondre exactement à cette question.
MatrixFrog

1
.. N'oubliez pas d'ajouter github.com/github/gitignore/blob/master/Python.gitignore car c'est aussi un projet python.
Fábio Santos

1
juste goto gitignore.io et tapez python pour obtenir le fichier standard,
Bhanu Sinha

Réponses:


64

Lors de l'utilisation de buildout, je dois suivre .gitignore(avec *.pyoet *.pyc):

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

Merci à Jacob Kaplan-Moss

J'ai aussi tendance à mettre .svnen place puisque nous utilisons plusieurs SCM où je travaille.


35
Garder un dépôt svn dans le même arbre que votre dépôt git!? Quel genre de monstre ferait une telle chose?
Daenyth

@Daenyth fou rire , eh bien pas vraiment, mais je tends à trouver des restes de .svnrépertoires qui traînent si je reçois un composant d' une autre source (spécialement dans les anciens composants) et aussi je suis assez paresseux si je copie parfois au lieu d'exporter checkouts des trucs de SVN . J'ai même vu un gars commettre des restes .svn dans GIT. Vous pouvez rencontrer toutes sortes de choses étranges lorsque vous travaillez avec des gens stupides.
Davor Lucic

1
Eh bien j'essaye de les accrocher sur StackOverflow ...: p
Davor Lucic

1
Je n'ai pas encore utilisé Buildout, mais j'aurai probablement besoin de le faire bientôt ... alors je les mettrai sur la liste. Merci!
ewall

2
Vous devriez probablement mettre le *.svndans votre .global_gitignore, pas dans des projets individuels.
cowlicks

293

Github a un grand passe-partout .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
pourquoi devrions-nous ignorer les fichiers * .mo? juste par curiosité. ces fichiers .po de gettext sont-ils compilés sur le serveur séparément?
Ekin Ertaç

4
Les fichiers .mo sont la version lisible par machine (binaire) des fichiers .po, et, comme cela est largement connu, il est préférable de conserver les fichiers binaires en dehors d'un référentiel versionné, quand vous le pouvez (et vous devriez, car en incluant les deux .po et .mo signifie également conserver les données dupliquées dans le référentiel, que le VCS ne peut même pas "écraser")
dappiu

5
Pourquoi pas .DS_Store?
MaxCore

Je suis vraiment confus quant à la raison pour laquelle ils ont .python-versionen .gitignoreici: github.com/github/gitignore/blob/master/Python.gitignore#L82
aceofbassgreg

16

local_settings.py , pour les projets django.

* ~ pour tous les projets.


Ça a du sens. J'aime cette méthode de séparation de la configuration générale du spécifique / local / privé.
ewall

Comment cela marche-t-il? Autrement dit, comment Django ou Python sait-il quand l'environnement est local et quand il est en production?
MadPhysicist

13

Couvre la plupart des choses générales -

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

Référence: python .gitignore


Ceci est déjà mentionné ci-dessus!
Emmanuel

@Emmanuel Ce qui est mentionné dans l'autre réponse n'est pas un passe-partout générique, il a beaucoup de choses inutiles. Celui mentionné ici est générique pour n'importe quel Django / python.
Ani Menon

En effet, désolé pour ça ... Malheureusement je ne peux pas annuler mon downvote tant que la réponse n'est pas éditée ...
Emmanuel

6

Une question est de savoir si vous souhaitez également utiliser git pour le déploiement de vos projets. Si c'est le cas, vous aimeriez probablement exclure votre fichier sqlite local du référentiel, la même chose s'applique probablement aux téléchargements de fichiers (principalement dans votre dossier multimédia). (Je parle de django maintenant, car votre question est également balisée avec django)


Compris. Comme Django n'applique pas beaucoup de nom de fichier et de structure de répertoire, il est difficile de les spécifier à l'avance. Mais je peux au moins en prendre note, donc je me souviens quand je crée un nouveau projet.
ewall

Eh bien, devinez que vous devriez au moins faire en sorte que tous vos utilisateurs téléchargent des fichiers dans UN dossier dans votre répertoire multimédia, par exemple. media/uploads, vous pouvez donc les 'ignorer' avec une seule règle ...
Bernhard Vallant

4

Voici quelques autres fichiers qui peuvent être laissés par setuptools:

MANIFEST
*.egg-info

Je pense que je pourrais les laisser hors de ma valeur par défaut, car certains de mes projets ont des distributions setuptools qui en auraient besoin. Mais pour les plugins et autres, oui.
ewall
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.