2016-06-12 52 views
6

Quando lavoro con il PIL, devo importare una tonnellata di moduli PIL. Stavo sperimentando con tre modi per fare questo, ma solo l'ultimo funziona nonostante tutto è essere logico per me:Perché le importazioni del mio Python PIL non funzionano?

Importazione del PIL completa e chiamando suoi moduli nel codice: 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' 

Importazione tutto dal 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 

l'importazione di alcuni moduli da PIL: OK

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

Cosa non ho ottenuto qui?

risposta

3

PIL non importa alcun sottomodulo da solo. Questo è in realtà abbastanza comune.

Così, quando si utilizza from PIL import Image, è in realtà individuare il file Image.py e importare che, mentre quando si tenta di chiamare solo PIL.Image dopo import PIL, si sta tentando una ricerca attributo un modulo vuoto (dal momento che non ha importato eventuali sottomoduli).

Lo stesso ragionamento si applica al motivo per cui from PIL import * non funziona: è necessario importare in modo esplicito il modulo di immagine. In ogni caso, lo from ... import * è considerato una cattiva pratica a causa dell'inquinamento dello spazio dei nomi che si verificherà: la soluzione migliore è utilizzare from PIL import Image.

Inoltre, PIL non viene più mantenuta, ma per ragioni di compatibilità all'indietro si dovrebbe usare from PIL import Image è possibile garantire il codice rimarrà compatibile con l'ancora mantenuto Pillow (come oppposed a usando solo import Image).