โมดูลเทียบกับแพ็คเกจ?


140

เมื่อใดก็ตามที่ฉันทำfrom 'x' import 'y'ฉันสงสัยว่าอันไหนที่ถือว่าเป็น 'โมดูล' และอันไหนคือ 'แพ็คเกจ' และทำไมมันจึงไม่มีวิธีอื่น


1
เกี่ยวกับสาเหตุที่ไม่ใช่วิธีอื่น ๆ โปรดดูstackoverflow.com/questions/3600352/…

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

แนวคิดที่เกี่ยวข้องกับการรู้ - คลาสเทียบกับโมดูลใน Python
RBT

คำตอบ:


192

โมดูล Python เป็นเพียงไฟล์ต้นฉบับ Python ซึ่งสามารถเปิดเผยคลาสฟังก์ชันและตัวแปรโกลบอล

เมื่อนำเข้าจากแหล่งไฟล์ Python อื่นชื่อไฟล์จะถือเป็นเนมสเปซ

แพ็คเกจ Python เป็นเพียงไดเรกทอรีของโมดูล Python

ตัวอย่างเช่นลองนึกภาพไดเรกทอรีต้นไม้ต่อไปนี้ใน/usr/lib/python/site-packages:

mypackage/__init__.py <-- this is what tells Python to treat this directory as a package
mypackage/mymodule.py

ดังนั้นคุณจะทำ:

import mypackage.mymodule

หรือ

from mypackage.mymodule import myclass

อ๊ะดังนั้นเมื่อคุณบอกว่าชื่อไฟล์นั้นถือเป็นเนมสเปซคุณจะทำอะไรแบบนี้เหรอ? "mymodule.var1" สำหรับกรณีแรกหรือ "myclass.var1" สำหรับกรณีที่สอง?
Dark Templar

1
ไม่แน่นอน แพ็คเกจยังนับเป็นส่วนหนึ่งของเนมสเปซ ถ้าคุณต้องการทำสิ่งที่คุณพูดคุณต้องทำจาก mypackage นำเข้า mymodule
Yam Marcovic

มันอาจมีประโยชน์ในการเพิ่มบางอย่างเกี่ยวกับแพ็คเกจเนมสเปซซึ่งรหัสไม่จำเป็นต้องปรากฏในแผนผังไดเรกทอรีเดียวกัน
holdenweb

@holdenweb ไม่เคยใช้กลไกต่าง ๆ ที่เกี่ยวข้องโดยตรงดังนั้นจึงไม่ใช่ผู้เชี่ยวชาญ หากคุณให้คำอธิบายโดยละเอียดเกี่ยวกับคำตอบใหม่นี้ฉันจะอ้างอิงจากคำตอบของฉัน
Yam Marcovic

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