แนวทางปฏิบัติที่ดีที่สุดสำหรับการเพิ่มไฟล์. gignignore สำหรับโครงการ Python หรือไม่ [ปิด]


209

ฉันพยายามรวบรวมการตั้งค่าเริ่มต้นของฉันและสิ่งหนึ่งที่ฉันรู้ว่าฉันไม่มีมาตรฐานสำหรับคือไฟล์. gignignore มีเธรดที่ยอดเยี่ยมแสดง. gitignore ที่ดีสำหรับโครงการ Visual Studioแต่ฉันไม่เห็นคำแนะนำมากมายสำหรับ Python และเครื่องมือที่เกี่ยวข้อง (PyGTK, Django)

จนถึงตอนนี้ฉันมี ...

*.pyc
*.pyo

... สำหรับวัตถุที่รวบรวมและ ...

build/
dist/

... สำหรับเอาต์พุต setuptools

แนวปฏิบัติที่ดีที่สุดสำหรับไฟล์. gignignore คืออะไรและฉันจะไปหาแนวทางปฏิบัติที่ดีที่สุดเหล่านี้ได้จากที่ไหน?


16
โครงการนี้github.com/github/gitignoreได้รับการจัดตั้งขึ้นเพื่อตอบคำถามนี้อย่างแน่นอน
MatrixFrog

1
.. อย่าลืมเพิ่มgithub.com/github/gitignore/blob/master/Python.gitignoreเพราะมันเป็นโครงการหลามด้วย
Fábio Santos

1
เพียงแค่ goto gitignore.io และพิมพ์ python เพื่อรับไฟล์มาตรฐาน
Bhanu Sinha

คำตอบ:


64

เมื่อใช้buildoutฉันมีดังต่อไปนี้ใน.gitignore(พร้อมด้วย*.pyoและ*.pyc):

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

ขอบคุณJacob Kaplan-Moss

นอกจากนี้ฉันมักจะใส่.svnเพราะเราใช้หลาย SCM-s ที่ฉันทำงาน


35
เก็บ repo svn ไว้ในต้นไม้เดียวกับ repit คอมไพล์ของคุณ!? สัตว์ประหลาดชนิดไหนที่จะทำสิ่งนี้?
Daenyth

@Daenyth giggleไม่จริง แต่ฉันมักจะพบ.svnไดเรกทอรีที่เหลืออยู่ถ้าฉันได้รับส่วนประกอบจากแหล่งอื่น (โดยเฉพาะในส่วนประกอบเก่า) และฉันค่อนข้างขี้เกียจดังนั้นบางครั้งฉันคัดลอก checkouts แทนการส่งออกข้อมูลจาก SVN . ฉันเคยเห็นคนที่แต่งตัวประหลาดที่เหลือจริง. svn dirs ใน GIT คุณสามารถพบเจอกับสิ่งแปลก ๆ ทุกประเภทเมื่อทำงานกับคนโง่ ๆ
Davor Lucic

1
ดีฉันกำลังพยายามขอพวกเขาใน StackOverflow ... : p
Davor Lucic

1
ฉันยังไม่ได้ใช้ Buildout แต่อาจจะต้องรอสักครู่ในไม่ช้า ... ขอบคุณ!
eWall

2
คุณควรใส่*.svnในของคุณ .global_gitignoreไม่ใช่ในแต่ละโครงการ
cowlicks

293

Github มีหม้อไอน้ำที่ยอดเยี่ยม. 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
ทำไมเราควรเพิกเฉยไฟล์ * .mo เพียงเพื่อความอยากรู้ ไฟล์. po ของ gettext เหล่านั้นรวบรวมบนเซิร์ฟเวอร์แยกกันหรือไม่
Ekin Ertaç

4
ไฟล์. mo เป็นเวอร์ชันที่อ่านได้ของเครื่อง (ไฟล์ไบนารี) ของไฟล์. po และ - เป็นที่รู้จักอย่างกว้างขวาง - เป็นการดีกว่ามากที่จะเก็บไฟล์ไบนารีไว้นอกที่เก็บเวอร์ชันเมื่อคุณสามารถ (และคุณควรรวมทั้ง. po ทั้งคู่ และ. mo หมายถึงการเก็บข้อมูลที่ซ้ำกันในที่เก็บซึ่ง VCS ไม่สามารถแม้แต่ "สควอช")
dappiu

5
ทำไมไม่. DS_Store?
MaxCore

ฉันสับสนจริงๆว่าทำไมพวกเขาถึง.python-versionอยู่.gitignoreที่นี่: github.com/github/gitignore/blob/master/Python.gitignore#L82
aceofbassgreg

16

local_settings.py , สำหรับโครงการ django

* ~ สำหรับทุกโครงการ


นั่นทำให้รู้สึก ฉันชอบวิธีการนี้ในการแยกการตั้งค่าทั่วไปจากเฉพาะ / ท้องถิ่น / ส่วนตัว
eWall

มันทำงานอย่างไร นั่นคือ Django หรือ Python รู้ได้อย่างไรว่าสภาพแวดล้อมเป็นของท้องถิ่นและเมื่อมีการผลิต?
MadPhysicist

13

ครอบคลุมสิ่งทั่วไปส่วนใหญ่ -

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

การอ้างอิง: python .gignignore


สิ่งนี้ถูกกล่าวถึงข้างต้นแล้ว!
Emmanuel

@Emmanuel สิ่งที่กล่าวถึงในคำตอบอื่น ๆ ไม่ใช่แผ่นสำเร็จรูปทั่วไป แต่ก็มีสิ่งที่ไม่จำเป็นมากมาย สิ่งที่กล่าวถึงที่นี่มีไว้สำหรับ Django / python โดยทั่วไป
Ani Menon

แน่นอนขออภัยสำหรับ ... น่าเสียดายที่ฉันไม่สามารถยกเลิก downvote ของฉันจนกว่าคำตอบจะได้รับการแก้ไข ...
Emmanuel

6

คำถามหนึ่งก็คือถ้าคุณต้องการใช้ git สำหรับ deploment ของโครงการของคุณ ถ้าเป็นเช่นนั้นคุณอาจต้องการแยกไฟล์ sqlite ในพื้นที่ของคุณออกจากพื้นที่เก็บข้อมูลอาจใช้วิธีเดียวกันกับการอัปโหลดไฟล์ (ส่วนใหญ่อยู่ในโฟลเดอร์สื่อของคุณ) (ฉันกำลังพูดถึง django ตอนนี้เนื่องจากคำถามของคุณถูกแท็กด้วย django)


เข้าใจ เนื่องจาก Django ไม่บังคับใช้ชื่อไฟล์และโครงสร้างไดเรกทอรีส่วนใหญ่จึงเป็นการยากที่จะระบุล่วงหน้า แต่อย่างน้อยฉันก็สามารถจดบันทึกได้ดังนั้นฉันจึงจำได้เมื่อฉันสร้างโครงการใหม่
ewall

อย่างน้อยคุณควรทำให้เป็นเรื่องธรรมดาที่จะมีผู้ใช้ทั้งหมดของคุณอัปโหลดไฟล์ในหนึ่งโฟลเดอร์ในสื่อของคุณเช่น media/uploadsดังนั้นคุณสามารถ 'เพิกเฉย' กฎเหล่านี้ทั้งหมดได้ด้วยกฎข้อเดียว ...
Bernhard Vallant

4

นี่คือไฟล์อื่น ๆ ที่อาจถูกทิ้งไว้โดย setuptools:

MANIFEST
*.egg-info

ฉันคิดว่าฉันอาจปล่อยให้สิ่งเหล่านี้หลุดออกจากค่าเริ่มต้นของฉันเพราะบางโครงการของฉันมีการกระจาย setuptools ที่จะต้องใช้พวกเขา แต่สำหรับปลั๊กอินและเช่นนั้นใช่
eWall
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.