Python 3.5.1 kullanıyorum. Ben belgeyi ve burada paket bölümünü okuyun: Şimdi https://docs.python.org/3/tutorial/modules.html#packagesPython 3 paketlerinde __init__.py gerekli değil mi?
, aşağıdaki yapıya sahiptir:
/home/wujek/Playground/a/b/module.py
module.py
: Şimdi
class Foo:
def __init__(self):
print('initializing Foo')
/home/wujek/Playground
ise:
~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
Benzer şekilde, şimdi evde, 012 süper klasörü: Aslında
~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
, ben hepsi bir sürü yapabilirsiniz:
~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Neden bu işler? a
ve module.py
için dosyaları (boş olanlar çalışacak) olması gerekiyordu, ancak Python yolu Playground
klasörüne işaret ettiğinde, içe aktarılabilir olmak gerekiyordu.
Bu görünüyor
Python 2.7 den değişmiş:~ $ 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
ile ~/Playground/a
ve ~/Playground/a/b
iyi çalışıyor hem de.
Ben belgeyi okuyacak, ama biraz uzun. Hızlı bir şekilde özetlemek mümkün mü?Bana söyler misiniz: hala __init__.py dosyasını destekliyor mu, yoksa tamamen yok sayar mı? Onları destekliyorsa, işlevsellikteki fark nedir ve neden bu ikilik? – wujek
Evet, hala çalışıyor. Bu nedenle, tüm Python 2 paketleriniz '__init __. Py' dosyaları ile ithalat açısından çalışacaktır (burada dikkate alınmayan Python 2 ve 3 arasındaki diğer farklar). –
Yani eğitim muhtemelen güncellenmelidir. Bunun için bir dokümantasyon hatası mı açıldı? –