ฉันใช้ Python 3.5.1 ฉันอ่านเอกสารและส่วนแพ็คเกจที่นี่: https://docs.python.org/3/tutorial/modules.html#packages
ตอนนี้ฉันมีโครงสร้างต่อไปนี้:
/home/wujek/Playground/a/b/module.py
module.py
:
class Foo:
def __init__(self):
print('initializing Foo')
ตอนนี้ในขณะที่/home/wujek/Playground
:
~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
ในทำนองเดียวกันตอนนี้อยู่ที่บ้าน superfolder ของPlayground
:
~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
ที่จริงฉันสามารถทำสิ่งต่าง ๆ ได้ทุกอย่าง:
~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
ทำไมจึงใช้งานได้ ผมคิดว่ามีความจำเป็นที่จะ__init__.py
ไฟล์ (คนที่ว่างเปล่าจะทำงาน) ทั้งในa
และb
สำหรับmodule.py
ที่จะ importable เมื่องูหลามจุดเส้นทางไปยังPlayground
โฟลเดอร์?
ดูเหมือนว่าจะเปลี่ยนไปจาก Python 2.7:
~ $ PYTHONPATH=Playground python
>>> import a
ImportError: No module named a
>>> import a.b
ImportError: No module named a.b
>>> import a.b.module
ImportError: No module named a.b.module
ด้วย__init__.py
ทั้งใน~/Playground/a
และ~/Playground/a/b
มันใช้งานได้ดี