Почему мой Python PIL imports не работает?

когда я работаю с PIL, я должен импортировать тонны модулей PIL. Я экспериментировал с тремя способами сделать это, но только последний работает, несмотря на все логично для меня:

импорт полного PIL и вызов его модулей в коде: 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'

импорт всего из PIL: нет

>>> 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 

импорт некоторых модулей из 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...

что я не попал сюда?

1 ответов


PIL не импортирует никаких подмодулей самостоятельно. На самом деле это довольно распространенное явление.

поэтому, когда вы используете from PIL import Image, вы на самом деле найдите Image.py file и импортировать это, тогда как при попытке просто вызвать PIL.Image после import PIL, вы пытаетесь найти атрибут в пустом модуле (так как вы не импортировали никаких подмодулей).

то же самое рассуждение относится к why from PIL import * не будет работать - вам нужно явно импортировать подмодуль изображения. В в любом случае,from ... import * рассматривается как плохая практика из - за загрязнения пространства имен, которое произойдет-лучше всего использовать from PIL import Image.

кроме того, PIL больше не поддерживается, но для целей обратной совместимости вы должны использовать from PIL import Image вы можете гарантировать, что ваш код будет оставаться совместимым со все еще сохраняется подушка (как oppposed просто используя import Image).