การกระจายไฟล์หลามเดียว: โมดูลหรือแพ็คเกจ?


24

สมมติว่าฉันมีฟังก์ชั่นหลามที่มีประโยชน์หรือคลาส (หรืออะไรก็ตาม) ที่เรียกว่าuseful_thingซึ่งมีอยู่ในไฟล์เดียว มีสองวิธีที่จำเป็นในการจัดระเบียบต้นไม้ต้นกำเนิด วิธีแรกใช้โมดูลเดียว:

- setup.py
- README.rst
- ...etc...
- foo.py

ที่กำหนดไว้ในuseful_thing foo.pyกลยุทธ์ที่สองคือการทำแพคเกจ:

- setup.py
- README.rst
- ...etc...
- foo
|-module.py
|-__init__.py

ที่กำหนดไว้ในuseful_thing module.pyในกรณีแพคเกจ__init__.pyจะมีลักษณะเช่นนี้

from foo.module import useful_thing

from foo import useful_thingเพื่อที่ว่าในทั้งสองกรณีที่คุณสามารถทำได้

คำถาม:วิธีใดที่เป็นที่ต้องการและทำไม

แก้ไข: เนื่องจากผู้ใช้ริ้นกล่าวว่าคำถามนี้เกิดขึ้นไม่ดีฉันจะเพิ่มว่าการสอนบรรจุภัณฑ์งูใหญ่อย่างเป็นทางการดูเหมือนจะไม่แสดงความคิดเห็นว่าวิธีการใดที่อธิบายไว้ข้างต้นเป็นวิธีที่ต้องการ ฉันไม่ได้ให้รายการข้อดีข้อเสียส่วนตัวอย่างชัดเจนเพราะฉันสนใจว่ามีวิธีที่ชุมชนต้องการหรือไม่ไม่สร้างการอภิปรายข้อดี / ข้อเสีย :)


ที่ใช้ร่วมกันวิจัยของคุณช่วยให้ทุกคน บอกให้เราทราบว่าคุณได้ลองทำอะไรและทำไมมันไม่ตรงกับความต้องการ สิ่งนี้แสดงให้เห็นว่าคุณได้ใช้เวลาในการพยายามช่วยตัวเองมันช่วยให้เราไม่ต้องย้ำคำตอบที่ชัดเจนและส่วนใหญ่จะช่วยให้คุณได้คำตอบที่เฉพาะเจาะจงและเกี่ยวข้องมากขึ้น ดูวิธีถาม
gnat

1
@gnat: ขอบคุณสำหรับลิงค์ไปยังวิธีการถาม ฉันตระหนักถึงคำถามที่ดีในการฝึกปฏิบัติ แต่ในกรณีนี้ฉันไม่คิดว่าเป็นการเหมาะสมที่จะให้ประสบการณ์ของฉันเพราะนั่นอาจทำให้สิ่งที่ฉันถามเป็นคำถาม "A หรือ B" ที่ชัดเจนกลายเป็นการเรี่ยไรความคิดเห็น คุณจะแนะนำให้ปรับปรุงคำถามนี้อย่างไรโดยไม่ทำให้เกิดความเห็น
DanielSank

@gnat: กล่าวอีกนัยหนึ่งถ้าฉันมีความสนใจในรายการข้อดี / ข้อเสียของทั้งสองวิธีฉันจะถามว่า "ข้อดีและข้อเสียของสองวิธีนี้คืออะไร" และจะรวมรายการบางส่วนของตัวเองด้วย
DanielSank

คำตอบ:


17

คุณทำสิ่งที่ง่ายที่สุดที่เหมาะกับคุณ

สำหรับโมดูลฟังก์ชั่นเดียวนั้นไม่มีจุดที่แน่นอนในการสร้างแพ็คเกจ แพคเกจมีประโยชน์สำหรับการสร้างเนมสเปซเพิ่มเติมและ / หรือสำหรับการจัดระเบียบโค้ดของคุณในหลาย ๆ โมดูล

jsonและunittestโมดูลในห้องสมุดมาตรฐานหลามจริงๆแพคเกจเช่นสำหรับวัตถุประสงค์รหัสองค์กร แต่ก็เป็นการดีที่จะปล่อยให้โค้ดอยู่ในไฟล์ python เพียงไฟล์เดียวซึ่งเป็นโมดูลเดียว

หากคุณต้องการตัวอย่าง:

สำหรับตัวอย่างที่ดีของโครงการที่ใช้ประโยชน์จากแพ็คเกจได้อย่างยอดเยี่ยมดูที่:

ไม่มีคำแนะนำ 'อย่างเป็นทางการ'; ตัวเลือกทั้งสองถูกต้องทั้งหมด


ดังนั้นจึงไม่มีวิธีที่ต้องการอย่างเป็นทางการ?
DanielSank

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