Praktik terbaik untuk menambahkan file .gitignore untuk proyek Python? [Tutup]

209

Saya mencoba untuk mengumpulkan beberapa pengaturan default saya, dan satu hal yang saya sadari saya tidak memiliki standar adalah file .gitignore. Ada utas hebat yang menunjukkan .gitignore yang bagus untuk proyek-proyek Visual Studio , tapi saya tidak melihat banyak rekomendasi untuk Python dan alat terkait (PyGTK, Django).

Sejauh ini, saya sudah ...

*.pyc
*.pyo

... untuk objek yang dikompilasi dan ...

build/
dist/

... untuk output setuptools.

Apa saja praktik terbaik untuk file .gitignore, dan ke mana saya dapat mencari lebih banyak tentang praktik terbaik ini?

ewall
sumber
16
Proyek ini github.com/github/gitignore dibuat untuk menjawab pertanyaan ini.
MatrixFrog
1
.. Jangan lupa untuk menambahkan github.com/github/gitignore/blob/master/Python.gitignore karena ini juga merupakan proyek python.
Fábio Santos
1
cukup goto gitignore.io dan ketik python untuk mendapatkan file standar,
Bhanu Sinha

Jawaban:

64

Saat menggunakan buildout, saya harus mengikuti .gitignore(bersama *.pyodan *.pyc):

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

Terima kasih kepada Jacob Kaplan-Moss

Saya juga cenderung menggunakan .svnkarena kami menggunakan beberapa SCM-s tempat saya bekerja.

Davor Lucic
sumber
35
Menyimpan repo svn di pohon yang sama dengan repo git !? Monster apa yang akan melakukan hal seperti itu?
Daenyth
@Daenyth terkikik , yah tidak juga, tapi saya cenderung menemukan beberapa .svndirektori yang tersisa jika saya mendapatkan komponen dari sumber lain (khususnya di komponen yang lebih tua) dan juga saya cukup malas jadi saya kadang-kadang menyalin checkout daripada mengekspor barang dari SVN . Saya bahkan pernah melihat seorang pria benar-benar melakukan sisa .svn dir di GIT. Anda dapat mengalami semua hal aneh ketika bekerja dengan orang-orang bodoh.
Davor Lucic
1
Yah saya mencoba untuk menghubungkan mereka di StackOverflow ...: p
Davor Lucic
1
Saya belum pernah menggunakan Buildout, tetapi mungkin suatu saat nanti perlu ... jadi saya akan memasukkannya dalam daftar. Terima kasih!
ewall
2
Anda mungkin harus memasukkannya ke *.svndalam proyek Anda .global_gitignore, bukan di proyek-proyek individual.
cowlicks
293

Github memiliki .plit besar

# 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/
seanrose
sumber
1
mengapa kita harus mengabaikan file * .mo? hanya karena penasaran. Apakah file .t gettext itu dikompilasi di server secara terpisah?
Ekin Ertaç
4
File .mo adalah versi mesin (biner) yang dapat dibaca oleh mesin dari file .po, dan -secara luas- lebih baik menyimpan file biner di luar repositori berversi, ketika Anda bisa (dan Anda harus, karena termasuk keduanya .po dan .mo juga berarti menyimpan data duplikat dalam repositori, bahwa VCS bahkan tidak dapat "squash")
dappiu
5
Kenapa tidak .DS_Store?
MaxCore
Saya benar-benar bingung mengapa mereka ada .python-versiondi .gitignoresini: github.com/github/gitignore/blob/master/Python.gitignore#L82
aceofbassgreg
16

local_settings.py , untuk proyek Django.

* ~ untuk semua proyek.

Ofri Raviv
sumber
Itu masuk akal. Saya suka metode ini untuk memisahkan konfigurasi umum dari spesifik / lokal / pribadi.
ewall
Bagaimana cara kerjanya? Yaitu, bagaimana Django atau Python tahu kapan lingkungan itu lokal dan kapan itu produksi?
MadPhysicist
13

Mencakup sebagian besar hal umum -

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

Referensi: python .gitignore

Ani Menon
sumber
Ini sudah disebutkan di atas!
Emmanuel
@ Emmanuel Apa yang disebutkan dalam jawaban lain bukan boilerplate generik, ia memiliki banyak hal yang tidak perlu. Yang disebutkan di sini adalah untuk setiap Django / python secara umum.
Ani Menon
Memang, maaf untuk itu ... Sayangnya saya tidak dapat membatalkan downvote saya sampai jawaban diedit ...
Emmanuel
6

Satu pertanyaan adalah apakah Anda juga ingin menggunakan git untuk deploment proyek Anda. Jika demikian, Anda mungkin ingin mengecualikan file sqlite lokal Anda dari repositori, hal yang sama mungkin berlaku untuk unggahan file (kebanyakan di folder media Anda). (Saya berbicara tentang Django sekarang, karena pertanyaan Anda juga ditandai dengan Django)

Bernhard Vallant
sumber
Dimengerti Karena Django tidak menerapkan banyak nama file dan struktur direktori, sulit untuk menentukannya terlebih dahulu. Tapi setidaknya saya bisa mencatatnya jadi saya ingat ketika saya membuat proyek baru.
ewall
Yah kira Anda setidaknya harus membuatnya umum untuk memiliki semua file pengguna Anda diunggah dalam SATU folder di dir media Anda, misalnya. media/uploads, jadi Anda bisa 'mengabaikan' semuanya dengan satu aturan ...
Bernhard Vallant
4

Berikut adalah beberapa file lain yang mungkin ditinggalkan oleh setuptools:

MANIFEST
*.egg-info
jathanisme
sumber
Saya pikir saya mungkin meninggalkan ini dari default saya, karena beberapa proyek saya memiliki setuptools distribusi yang akan membutuhkannya. Tapi untuk plugin dan semacamnya, ya.
ewall