Python PIL和导入语句是怎么回事

Python PIL和导入语句是怎么回事,python,python-imaging-library,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

我在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
所以,现在我想知道为什么会这样,发生了什么

最初,我使用的是安装了的PIL。但是我做了mods,然后让PIL在windows上的virtualenv下构建和安装(在linux上是很平常的,在windows上是PITA)。但是,现在我必须使用第二种导入形式,即使
pipfreeze
显示
PIL==1.1.7
已安装


为什么第一个导入表单在安装了PIL的情况下不工作,而第二个表单工作(PIL代码正在运行),这表明它已安装,但没有显示在PIL下。

编辑:从@cgohlke对我答案的评论中,:

对从标准导入的支持 命名空间[已删除];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,它只是被分解成它的组件模块

这也是中的问题,@Ignacio在一条评论中提到,实际上希望以这种方式安装,第一段代码开始:

>>> import Image
不是来自PIL导入图像的

我同意这是令人困惑的行为,但我猜这是一个相对较大的包,因此他们可能认为不需要处理额外的深度更容易


这似乎是问题所在,尽管只有最后一位回答者知道了,但其他人不知道发生了什么。

请始终描述某些东西是如何不起作用的,而不仅仅是它不起作用。还包括生成的任何回溯。我认为这很清楚,您需要使用Image类的导入发生了更改。在我的情况下,我将它安装为
python setup.py install
,我必须执行
import Image
。当我使用windows安装程序时,我使用的是来自PIL导入映像的
。并将其添加到我的博客中。因此,问题是,PIL到底发生了什么。很明显,有些东西是乱七八糟的,或者像Django这样的软件包没有解决方法来处理它的“两种安装方式”。但问题是,你不应该“修复”它,这被认为是正确的行为。同样有趣的是,您链接到了自己的博客,但它是一个(可能暂时)死链接。python setup.py安装使其未封装,而使用windows安装程序使其封装。这两本书都出自同一位作者,但事实并非如此。由于缺乏一致性,我们在Django代码中看到了黑客行为。出现问题。请注意,
导入图像
在PIL 1.2中将不再工作+