Thực tiễn tốt nhất để thêm tệp .gitignore cho các dự án Python? [đóng cửa]


207

Tôi đang cố gắng thu thập một số cài đặt mặc định của mình và một điều tôi nhận ra rằng tôi không có tiêu chuẩn cho các tệp .gitignore. Có một chủ đề tuyệt vời cho thấy một .gitignore tốt cho các dự án Visual Studio , nhưng tôi không thấy nhiều đề xuất cho Python và các công cụ liên quan (PyGTK, Django).

Cho đến nay, tôi có ...

*.pyc
*.pyo

... cho các đối tượng được biên dịch và ...

build/
dist/

... cho đầu ra setuptools.

Một số thực tiễn tốt nhất cho các tệp .gitignore là gì và tôi có thể tìm hiểu thêm về các thực tiễn tốt nhất này ở đâu?


16
Dự án này github.com/github/gitignore đã được thiết lập để trả lời chính xác câu hỏi này.
MatrixFrog

1
.. Đừng quên thêm github.com/github/gitignore/blob/master/Python.gitignore vì đây cũng là một dự án python.
Fábio Santos

1
chỉ cần goto gitignore.io và gõ python để có được tệp chuẩn,
Bhanu Sinha

Câu trả lời:


63

Khi sử dụng bản dựng, tôi đã theo dõi .gitignore(cùng với *.pyo*.pyc):

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

Cảm ơn Jacob Kaplan-Rêu

Ngoài ra tôi có xu hướng đưa .svnvào vì chúng tôi sử dụng một số SCM-s nơi tôi làm việc.


35
Giữ một repo svn trong cùng một cây với repo git của bạn!? Loại quái vật nào sẽ làm một điều như vậy?
Daenyth

@Daenyth cười khúc khích , cũng không thực sự, nhưng tôi có xu hướng tìm thấy một số còn sót lại .svnthư mục nằm xung quanh nếu tôi nhận được một phần từ nguồn khác (đặc biệt trong thành phần trở lên) và tôi cũng khá lười biếng vì vậy tôi đôi khi sao chép Thanh toán thay vì xuất khẩu công cụ từ SVN . Tôi thậm chí đã từng thấy một anh chàng thực sự cam kết các thư mục .svn còn sót lại trong GIT. Bạn có thể gặp phải tất cả những điều kỳ lạ khi làm việc với những người ngớ ngẩn.
Davor Lucic

1
Chà, tôi đang cố nối chúng trên StackOverflow ...: p
Davor Lucic

1
Tôi chưa sử dụng Buildout, nhưng có lẽ sẽ sớm đến một ngày nào đó ... vì vậy tôi sẽ đưa họ vào danh sách. Cảm ơn!
ewall

2
Bạn có lẽ nên đặt *.svntrong của bạn .global_gitignore, không phải trong các dự án cá nhân.
cowlicks

292

Github có một cái nồi lớn .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
Tại sao chúng ta nên bỏ qua các tập tin * .mo? chỉ vì tò mò. các tệp .po của gettext có được biên dịch riêng trên máy chủ không?
Ekin Ertaç

4
Các tệp .mo là phiên bản máy (nhị phân) có thể đọc được của máy .po và được biết đến rộng rãi - tốt hơn hết là giữ các tệp nhị phân bên ngoài kho lưu trữ được phiên bản, khi bạn có thể (và bạn nên, kể cả bao gồm cả .po và .mo có nghĩa là cũng giữ dữ liệu trùng lặp trong kho lưu trữ, rằng VCS thậm chí không thể "squash")
dappiu

5
Tại sao không .DS_Store?
MaxCore

Tôi thực sự bối rối về lý do tại sao họ có .python-version.gitignoređây: github.com/github/gitignore/blob/master/Python.gitignore#L82
aceofbassgreg

15

local_sinstall.py , cho các dự án django.

* ~ cho tất cả các dự án.


Điều đó có ý nghĩa. Tôi thích phương pháp này để tách cấu hình chung khỏi cụ thể / cục bộ / riêng tư.
ewall

Cái này hoạt động ra sao? Đó là, làm thế nào Django hoặc Python biết khi nào môi trường là cục bộ và khi nào nó được sản xuất?
MadPhysicist

12

Bao gồm hầu hết các công cụ chung -

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

Tham khảo: trăn .gitignore


Điều này đã được đề cập ở trên!
Emmanuel

@Emmanuel Những gì được đề cập trong câu trả lời khác không phải là một cái nồi hơi chung chung, nó có nhiều thứ không cần thiết. Một trong những đề cập ở đây là cho bất kỳ Django / python nói chung.
Ani Menon

Thật vậy, xin lỗi vì điều đó ... Thật không may, tôi không thể hủy bỏ downvote của mình cho đến khi câu trả lời được chỉnh sửa ...
Emmanuel

6

Một câu hỏi là nếu bạn cũng muốn sử dụng git cho các dự án của bạn. Nếu vậy, bạn có thể muốn loại trừ tệp sqlite cục bộ của mình khỏi kho lưu trữ, điều tương tự có thể áp dụng cho tải lên tệp (chủ yếu trong thư mục phương tiện của bạn). (Bây giờ tôi đang nói về django, vì câu hỏi của bạn cũng được gắn thẻ với django)


Hiểu. Vì Django không thực thi nhiều cấu trúc thư mục và tên tệp, nên khó có thể chỉ định trước các tệp này. Nhưng ít nhất tôi có thể ghi chú về nó để tôi nhớ khi tôi đang tạo một dự án mới.
ewall

Hãy đoán xem ít nhất bạn nên làm cho nó phổ biến để tất cả người dùng của bạn tải lên các tệp trong thư mục ONE trong thư mục phương tiện của bạn, vd. media/uploads, vì vậy bạn có thể 'bỏ qua' tất cả chúng với một quy tắc ...
Bernhard Vallant

4

Dưới đây là một số tệp khác có thể bị bỏ lại bởi setuptools:

MANIFEST
*.egg-info

Tôi nghĩ rằng tôi có thể bỏ những thứ này ra khỏi mặc định của mình, bởi vì một số dự án của tôi có các bản phân phối setuptools sẽ cần đến chúng. Nhưng đối với các plugin và như vậy, có.
ewall
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.