You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

import PIL与from PIL import Image的区别是什么?

问题核心原因

这是Python不同包的顶层导出规则差异导致的,和Python导入规则不冲突:

  • datetime是标准库的模块,import datetime导入的datetime模块本身内部就定义了datetime类,所以可以直接通过datetime.datetime访问类成员。
  • PIL(Pillow)是多文件组成的Python包,它的顶层__init__.py默认没有主动导入Image子模块,所以直接执行import PIL时,PIL的命名空间里不会自动包含Image属性,自然会报AttributeError。
可用的两种正确写法
  • 写法1(你已经验证可行,修正了原示例的语法错误):
from PIL import Image
batman = Image.open("image.jpg")
batmobile, batplane = batman.size
print(batmobile,"x",batplane)
  • 写法2:显式导入PIL下的Image子模块,也可以用你最开始的调用形式:
import PIL.Image
batman = PIL.Image.open("image.jpg")
batmobile, batplane = batman.size
print(batmobile,"x",batplane)

补充:你修改后的示例代码存在语法错误,Image.open后缺少左括号,正确写法是Image.open("image.jpg")

原理验证

你可以自己构造简单包验证这个逻辑:

  1. 新建名为test_pkg的文件夹,创建两个文件:
    • 空内容的__init__.py(包的标识文件)
    • test_mod.py,内容为:
    def say_hi():
        print("hi")
    
  2. 在同级目录执行测试代码:
    import test_pkg
    # 下面这行运行会报AttributeError,和你遇到的PIL问题完全一致
    test_pkg.test_mod.say_hi()
    
  3. 给test_pkg/__init__.py添加一行from . import test_mod,再执行上面的测试代码就可以正常运行,这就是datetime包采用的导出逻辑。

内容的提问来源于stack exchange,提问作者user16074414

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 18:15:09