Python PIL没有属性'Image'

Squ*_*all 26 python import python-imaging-library

我正在使用python2.6并且今天早上遇到了问题.它说"模块"没有属性"图像".这是我的意见.为什么我第一次不能使用PIL.Image?

>>> import PIL
>>> PIL.Image
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'Image'
>>> from PIL import Image
>>> Image
<module 'PIL.Image' from '/usr/lib/python2.6/dist-packages/PIL/Image.pyc'>
>>> PIL.Image
<module 'PIL.Image' from '/usr/lib/python2.6/dist-packages/PIL/Image.pyc'>
Run Code Online (Sandbox Code Playgroud)

con*_*ion 49

如果您像我一样,发现接受的答案有点令人困惑,因为您可以发誓您已经能够使用

import PIL
PIL.Image
Run Code Online (Sandbox Code Playgroud)

以前有时,出现这种情况的一个潜在原因是,如果您的 Python 会话中的任何其他代码已经运行,from PIL import Image或者import PIL.Image,即使它位于完全不同的范围内,您也将能够访问PIL.Image.

特别是matplotlib在导入时会这样做。所以如果你跑

import matplotlib
import PIL
PIL.Image
Run Code Online (Sandbox Code Playgroud)

有用。谢谢,Python。

不要相信任何人。不要相信Python。使用import PIL.Image

  • 这个答案令人大开眼界,应该成为主要答案的一部分 (4认同)

Ant*_*ony 36

PIL __init__.py只是一个常见的空存根.它本身不会神奇地导入任何东西.

当你这样做时from PIL import Image,查看PIL包并找到文件Image.py并导入它.当你这样做时,PIL.Image你实际上是在PIL模块上进行属性查找(除非你明确地导入东西,否则它只是一个空的存根).

实际上,导入模块通常不会导入子模块.os.path是一个着名的例外,因为os模块是神奇的.

更多信息:
图像模块


Rez*_*-S4 8

你可以做:

try:
    import Image
except ImportError:
    from PIL import Image
Run Code Online (Sandbox Code Playgroud)

最好用枕头代替PIL。