Что происходит с PIL и оператором импорта - PullRequest
4 голосов
/ 20 августа 2011

Я нахожу этот код в Джанго:

# Try to import PIL in either of the two ways it can end up installed.
try:
    from PIL import ImageFile as PILImageFile
except ImportError:
    import ImageFile as PILImageFile

и до недавнего времени я просто считал это неважным. Тем не менее, я построил PIL под моим virtualenv в окнах и вдруг

from PIL import Image

больше не работает, я должен использовать

import Image

Итак, теперь я хочу понять, почему и что происходит.

Изначально я использовал PIL, установленный с установщиком Windows . Но мне нужна была поддержка чтения для факсов Group4 , поэтому я сделал моды, а затем получил PIL для сборки и установки под virtualenv на окнах (что тривиально для Linux и PITA для окон). Но теперь мне нужно использовать вторую форму импорта, хотя pip freeze показывает, что PIL==1.1.7 в установленном.

Как получается, что первая форма импорта не работает, даже если PIL, кажется, установлен, а вторая форма работает (и код PIL работает), указывая, что она установлена, но не отображается под PIL.

1 Ответ

4 голосов
/ 20 августа 2011

Редактировать : из комментария к моему ответу @cgohlke, это изменится в PIL1.2 :

поддержка импорта изстандартное пространство имен [было удалено];PIL теперь живет только в пространстве имен PIL


Я думаю, что комментарий Django довольно ясен:

# Try to import PIL in either of the two ways it can end up installed.

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

from PIL import ImageFile as PILImageFile

или каждый из модулей может быть установлен отдельно:

import ImageFile as PILImageFile

Таким образом, PIL установлен, он просто разделен на составляющие модули.

Это также проблема в Проблема с установкой PIL с использованием virtualenv или buildout , и @Ignacio упоминает в комментарии, что учебник PIL действительно ожидает его установки таким образомначинается самый первый фрагмент кода:

>>> import Image

не from PIL import Image.

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

Похоже, это проблема в Python - пакет, установленный с easy_install, не обнаруживается (PIL 1.1.7) , хотя толькопоследний ответесли бы он понял это, остальные люди не знают, что происходит.

...