2016-06-12 22 views
6

Wenn ich mit dem PIL arbeite, muss ich Tonnen von PIL-Modulen importieren. Ich war mit drei Möglichkeiten zu experimentieren, dies zu tun, sondern nur das letzte Werk trotz aller mir wird logisch:Warum funktionieren meine Python-PIL-Importe nicht?

die komplette PIL Importieren und es ist Module im Code aufrufen: NOPE

>>> import PIL 
>>> image = PIL.Image.new('1', (100,100), 0) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'Image' 

alles importieren von PIL: NOPE

>>> from PIL import * 
>>> image = Image.new('1', (100,100), 0) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'Image' is not defined 

einige Module von PIL importieren: OK

>>> from PIL import Image 
>>> image = Image.new('1', (100,100), 0) 
>>> image 
<PIL.Image.Image image mode=1 size=100x100 at 0xB6C10F30> 
>>> # works... 

Was habe ich nicht hier?

Antwort

3

PIL importiert keine eigenen Submodule. Das ist eigentlich ziemlich üblich.

Also, wenn Sie from PIL import Image verwenden, Sie finden tatsächlich die Image.py Datei und importieren, dass, während, wenn Sie nur PIL.Image versuchen, rufen nach import PIL, sind Sie ein Attribut-Lookup auf einem leeren Modul versucht (, da Sie nicht importieren tat beliebige Submodule).

Die gleiche Argumentation gilt für warum from PIL import * wird nicht funktionieren - Sie müssen das Image-Submodul explizit importieren. In jedem Fall wird from ... import * wegen der Namensraumverschmutzung, die auftreten wird, als schlechte Praxis angesehen - Ihre beste Wette ist es, from PIL import Image zu verwenden.

Ferner wird PIL nicht mehr aufrechterhalten werden, aber aus Gründen der Abwärtskompatibilität sollten Sie verwenden from PIL import Image Sie Ihren Code sichern können, wird mit der nach wie vor gepflegt Pillow kompatibel bleiben (wie eben import Image oppposed zu verwenden).

Verwandte Themen