不好意思,提问的时候有些信息没有提供完全。
使用的是Python3.6
。之前的代码示例也有些问题。
在用 PIL 的时候,需要这样 import:
from PIL import Image
im = Image.open("xxx")
``
但是为什么不能:
import PIL im = PIL.Image.open("xxx")
看过`PIL`包下的`__init__.py`文件,确实没有导入`Image`。
1
264768502 2017-10-10 23:11:47 +08:00 via iPad
难道不是 import Image?
Pillow? PIL 是一个目录(包),它不是一个类或者方法,所以不存在 PIL.Image()这个东西 |
2
stebest 2017-10-10 23:21:55 +08:00 via Android
你知道__future__不,通常 2 的版本会有 import print_function. 和这个一样,你需要具体到特定的函数,直接 import PIL 结果是什么也不引入。
|
3
keysona 2017-10-10 23:23:49 +08:00 1
https://github.com/python-pillow/Pillow/blob/master/PIL/__init__.py
看看它的__init__.py 文件吧。 它那里并没有帮你导入 Image,所以需要 from xxx import xxx 这样导入。 |
4
TenTo OP @keysona #3,确实如你所说,`Python`在导入的时候是根据`__init__.py`来决定哪些模块是导入包的时候就导入的。感谢。
|
5
Morriaty 2017-10-11 09:56:24 +08:00 1
> when you import a package, only variables/functions/classes in the __init__.py file of that package are directly visible, not sub-packages or modules.
|
6
scriptB0y 2017-10-11 10:19:02 +08:00
Python 的 package 相当于一个名字空间(一种特殊的 module 类型),import package 会调用 __import__() 搜索到该 package 然后执行下面的 __init__.py ,将最后得到的对象和一个名字绑定在一起。也就是你得到的 PIL。所以你得到的这个对象并没有 Image。
但是我觉得 ``` from PIL import Image import PIL im = PIL.Image.open("xxx") ``` 就没有问题了。具体看一下文档 https://docs.python.org/3/reference/import.html#packages 应该就没什么疑问了。 |
7
yangtukun1412 2017-10-11 11:41:31 +08:00
import PIL.Image
|