Najlepsze praktyki dodawania pliku .gitignore dla projektów Python? [Zamknięte]


209

Próbuję zebrać niektóre z moich domyślnych ustawień, a jedną z rzeczy, z których zdałem sobie sprawę, że nie mam standardu, są pliki .gitignore. Jest świetny wątek pokazujący dobry .gitignore dla projektów Visual Studio , ale nie widzę wielu rekomendacji dla Pythona i powiązanych narzędzi (PyGTK, Django).

Do tej pory mam ...

*.pyc
*.pyo

... dla skompilowanych obiektów i ...

build/
dist/

... dla wyjścia setuptools.

Jakie są najlepsze praktyki dotyczące plików .gitignore i gdzie mogę uzyskać więcej informacji na temat tych najlepszych praktyk?


16
Ten projekt github.com/github/gitignore został utworzony, aby odpowiedzieć dokładnie na to pytanie.
MatrixFrog,

1
.. Po prostu nie zapomnij dodać github.com/github/gitignore/blob/master/Python.gitignore, ponieważ jest to również projekt python.
Fábio Santos

1
po prostu przejdź do gitignore.io i wpisz python, aby uzyskać standardowy plik,
Bhanu Sinha

Odpowiedzi:


64

Podczas korzystania z buildout mam następujące w .gitignore(wraz z *.pyoi *.pyc):

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

Dzięki Jacob Kaplan-Moss

Również mam tendencję do wkładania, .svnponieważ używamy kilku SCM-ów, w których pracuję.


35
Utrzymywanie repozytorium svn w tym samym drzewie co repozytorium git !? Jaki potwór zrobiłby coś takiego?
Daenyth,

@Daenyth chichocze , cóż, nie bardzo, ale zwykle znajduję resztki .svnkatalogów leżących w pobliżu, jeśli otrzymuję komponent z innego źródła (szczególnie w starszych komponentach), a także jestem dość leniwy, więc czasami kopiuję kasy zamiast eksportować rzeczy z SVN . Raz nawet widziałem faceta, który faktycznie popełnił resztki katalogów .svn w GIT. Podczas pracy z głupimi ludźmi możesz napotkać różne dziwne rzeczy.
Davor Lucic,

1
Cóż, próbuję podłączyć je do StackOverflow ...: p
Davor Lucic,

1
Nie korzystałem jeszcze z Buildouta, ale pewnie kiedyś będę musiał to zrobić ... więc umieszczę je na liście. Dzięki!
ewall

2
Prawdopodobnie powinieneś umieścić to *.svnw swoich .global_gitignore, a nie w indywidualnych projektach.
upada

293

Github ma świetną płytę kotłową .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
dlaczego powinniśmy ignorować pliki * .mo? tylko dla ciekawości. czy te pliki .po gettext są kompilowane osobno na serwerze?
Ekin Ertaç

4
Pliki .mo to odczytywalna maszynowo (binarna) wersja plików .po i - jak powszechnie wiadomo - o wiele lepiej jest przechowywać pliki binarne poza repozytorium wersjonowanym, kiedy możesz (i powinieneś, ponieważ w tym oba .po a .mo oznacza również przechowywanie zduplikowanych danych w repozytorium, których VCS nie może nawet „zgnieść”)
dappiu

5
Dlaczego nie .DS_Store?
MaxCore

Jestem naprawdę mylić, dlaczego mają .python-versionsię .gitignoretutaj: github.com/github/gitignore/blob/master/Python.gitignore#L82
aceofbassgreg

16

local_settings.py , dla projektów django.

* ~ dla wszystkich projektów.


To ma sens. Podoba mi się ta metoda oddzielania ogólnej konfiguracji od konkretnego / lokalnego / prywatnego.
ewall

Jak to działa? To znaczy, skąd Django lub Python wiedzą, kiedy środowisko jest lokalne, a kiedy produkcyjne?
MadPhysicist,

13

Obejmuje większość ogólnych rzeczy -

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

Odniesienie: python .gitignore


Jest to już wspomniane powyżej!
Emmanuel

@Emmanuel To, co wspomniano w drugiej odpowiedzi, nie jest ogólną płytą kotłową, ma wiele niepotrzebnych rzeczy. Te wymienione tutaj są ogólnie dla każdego Django / Pythona.
Ani Menon,

Rzeczywiście, przepraszam za to ... Niestety nie mogę anulować mojego głosowania, dopóki odpowiedź nie zostanie zredagowana ...
Emmanuel,

6

Jedno pytanie dotyczy tego, czy chcesz użyć git do wdrożenia swoich projektów. Jeśli tak, prawdopodobnie chcesz wykluczyć lokalny plik sqlite z repozytorium, to samo prawdopodobnie dotyczy przesyłania plików (głównie w folderze multimediów). (Mówię teraz o django, ponieważ twoje pytanie jest również oznaczone tagiem django)


Zrozumiany. Ponieważ Django nie wymusza dużej części nazwy pliku i struktury katalogów, trudno jest je z góry określić. Ale mogę przynajmniej to zanotować, więc pamiętam, kiedy tworzę nowy projekt.
ewall

Zgadnij, powinieneś przynajmniej sprawić, aby wszystkie pliki przesłane przez użytkownika znajdowały się w JEDNYM folderze w katalogu multimediów, np. media/uploads, więc możesz je zignorować za pomocą jednej reguły ...
Bernhard Vallant,

4

Oto kilka innych plików, które mogą zostać pozostawione przez setuptools:

MANIFEST
*.egg-info

Myślę, że mogę pominąć te domyślne, ponieważ niektóre z moich projektów mają takie ustawienia setuptools, które będą ich potrzebować. Ale w przypadku wtyczek i tak, tak.
ewall
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.