在 Python 中导入 PIL(枕头)模块



为什么我可以在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'

我明白这些是一回事。为什么一个有效而另一个无效?

回答我自己的问题(现在我理解正确(。

在 Python 中,您可以导入:

  1. 模块 - 单个文件,例如 something.py;或
  2. 包 - 包含一个或多个.py文件的目录,并且始终包含一个名为__init__.py的文件,该文件将目录指定为包

在这种情况下,语句:

import PIL

实际上与说">导入PIL目录中的__init__.py文件"相同。在这种特定情况下,该__init__.py文件不会导入或以其他方式提供任何名为"Image"的类或其他模块,因此我随后在初始导入后的示例 2 中对它的引用失败。

相比之下,声明:

from PIL import Image

解释略有不同。这实际上与说">在包目录 PIL 中查找名为 Image 的模块并导入它"相同。

因此,您可以看到导入语句实际上有点依赖于上下文。在不同的情况下,它可能意味着不同的事情。

这是一个很好的资源,它解释了 import 语句根据上下文运行的不同方式。

最新更新