有时需要“从...导入...”而简单的“导入...”并不总是有效?为什么?

dyn*_*obo 5 python python-import python-imaging-library

我一直认为,做from x import y然后直接使用y,或者做import x然后再使用x.y只是风格问题,避免命名冲突。但似乎情况并非总是如此。有时from ... import ...似乎需要

Python 3.7.5 (default, Nov 20 2019, 09:21:52)
[GCC 9.2.1 20191008] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
>>> PIL.__version__
'6.1.0'
>>> im = PIL.Image.open("test.png")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'PIL' has no attribute 'Image'
>>> from PIL import Image
>>> im = Image.open("test.png")
>>>
Run Code Online (Sandbox Code Playgroud)

我在这里做错了吗?

如果没有,有人可以向我解释这种行为背后的机制吗?谢谢!

use*_*ica 7

对于子模块,无论是否使用from. 非from进口应该看起来像

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

否则,Python 将不会加载子模块,并且只有当包本身为您导入子模块或某些先前的代码已显式导入子模块时,才能访问子模块。

  • 差不多了。是否提供其(已知)子模块作为属性取决于包本身。`os` 是一个包的示例,它执行以下操作: `import os` 使 `os.path` 可用。 (2认同)