在Python中导入PIL(Pillow)模块

5

为什么我能在Python 3.7中做到这一点:

from PIL import Image
im = Image.open("hardcastle-crags-3462894.jpg")

但是不是这个,我曾经认为它是同样的东西:
import PIL
im = PIL.Image.open("hardcastle-crags-3462894.jpg")

后者的结果如下:
AttributeError: module 'PIL' has no attribute 'Image'

我曾以为它们是同一件事。为什么一个有效而另一个无效?


3
PIL.Image 是一个子模块,不会自动导入。 - Jonathon Reinhart
1个回答

6
为了回答我的问题(现在我已经正确理解),在Python中,你可以导入:
  1. 模块 - 单个文件例如 something.py;或者
  2. 包 - 包含一个或多个 .py 文件的目录,并且始终有一个名为 __init__.py 的文件指定该目录为一个包。
在这种情况下,这个语句:
import PIL

实际上就是说“在PIL目录中导入__init__.py文件”。在这种特定情况下,该__init__.py文件不会导入或提供任何名为“Image”的类或其他模块,因此我在初始帖子的示例2中对它的引用失败了。

相比之下,以下语句:

from PIL import Image

“import”语句的解释略有不同。就像说“在包目录PIL中查找名为Image的模块并导入它”一样。

因此,可以看出“import”语句实际上有点依赖于上下文。在不同情况下意义可能不同。

这个是一个很好的资源,它解释了根据上下文,“import”语句可以有不同的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接