PIL和import语句发生了什么

时间:2011-08-20 16:47:31

标签: python python-imaging-library

我在Django中找到了这段代码:

# 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
直到最近,我才把它当作不重要的。然而,我在windows中的virtualenv下构建了PIL并且突然间

from PIL import Image

不再起作用,我必须使用

import Image

所以,现在我想了解为什么以及发生了什么。

最初我使用的是windows installer安装的PIL。但是我needed read support for Group4 Faxes所以我做了mods然后得到了PIL来构建和安装在windows上的virtualenv(这在Linux上是微不足道的,在windows上是一个PITA)。但是,现在我必须使用第二种导入形式,即使pip freeze显示已安装PIL==1.1.7

即使PIL似乎已安装,第一个导入表单也不起作用,第二个表单有效(并且PIL代码正常运行),表明它已安装,但未显示在PIL下。

1 个答案:

答案 0 :(得分:4)

修改:从@cgohlke的评论到我的回答,this will change in 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,它只是拆分成它的组件模块。

这也是The problem with installing PIL using virtualenv or buildout中的问题,而@Ignacio在评论中提到PIL tutorial实际上期望以这种方式安装它,第一块代码开始:

>>> import Image

不是from PIL import Image

我同意这是令人困惑的行为,但我想这是一个相对较大的包,所以他们可能会认为更容易处理更深层次的事情。

这似乎是Python - package installed with easy_install is not being detected (PIL 1.1.7)中的问题,尽管只有那里的最后一位回答者才知道,其余的人都不知道发生了什么。