为什么我的Python PIL导入不起作用?

没有石头

在使用PIL时,我必须导入大量的PIL模块。我正在尝试使用三种方法来执行此操作,但是尽管所有方法对我来说都是合乎逻辑的,但只有最后一种有效:

导入完整的PIL并在代码中调用它的模块:NOPE

>>> import PIL
>>> image = PIL.Image.new('1', (100,100), 0) 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'Image'

从PIL导入所有内容:NOPE

>>> from PIL import *
>>> image = Image.new('1', (100,100), 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Image' is not defined 

从PIL导入一些模块:确定

>>> from PIL import Image
>>> image = Image.new('1', (100,100), 0)
>>> image
<PIL.Image.Image image mode=1 size=100x100 at 0xB6C10F30>
>>> # works...

我什么没来?

米拉杜洛

PIL本身不会导入任何子模块。这实际上很常见。

因此,当您使用时from PIL import Image,您实际上找到了Image.py文件并导入了文件,而当您尝试仅PIL.Image在after之后调用时,则尝试import PIL在一个空模块上进行属性查找(因为未导入任何子模块)。

同样的道理也适用于为什么from PIL import *不起作用-您需要显式导入Image子模块。在任何情况下,from ... import *由于将发生命名空间污染,这被视为不良做法-最好的选择是使用from PIL import Image

此外,不再维护PIL,但是出于向后兼容的目的,应该使用PILfrom PIL import Image来确保您的代码将与仍然维护的Pillow保持兼容(与仅使用相对import Image)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章