我在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下。
答案 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)中的问题,尽管只有那里的最后一位回答者才知道,其余的人都不知道发生了什么。