在python解释器中:
>>> import PIL
>>> PIL.Image
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'Image'
>>> from PIL import Image
>>> PIL.Image
<module 'PIL.Image' from '/usr/lib/python2.7/site-packages/PIL/Image.pyc'>为什么我必须将导入设置为"from PIL import Image"?我对这两个问题都很感兴趣:“python导入中的底层工作是什么使得这种行为成为可能?”和“为什么PIL包被设计成这样工作?”
此外,我真的喜欢在编程时保持一个干净的名称空间。如果我想在我的代码中使用PIL.Image,我应该像这样导入:
>>> import PIL
>>> from PIL import Image
>>> del Image还是有更好的方法?
发布于 2017-11-16 20:05:42
您可以导入PIL.Image
import PIL.Image
PIL.Image.open('my_pic.jpg')我认为Pillow之所以是这种结构,是因为它的历史。最初的包PIL允许您执行import Image。Pillow是支持Python3的PIL的分支,它将Image移到了PIL名称空间。建议的导入from PIL import Image使得从PIL切换到Pillow变得很容易。有关更多信息,请参阅porting docs。
发布于 2017-11-16 20:55:44
PIL.Image是PIL的一个子模块,因此不会自动导入,
import PIL因为Python不会递归导入子模块。
Python Language Reference中的5.4.2. Submodules可能有助于理解导入子模块的行为。
当使用任何机制加载子模块时,...在父模块的命名空间中放置到子模块对象的绑定。
因此,尽管在导入和加载子模块之后,
import PIL
from PIL import Image您可以通过PIL.Image访问它,这并不意味着在导入PIL模块时会加载PIL.Image。
此外,我在任何地方都找不到这一点,但从我测试的情况来看,似乎当您导入一个子模块时,如下所示:
import package.submodule或者:
from package import submodule父包也会加载到进程中。
https://stackoverflow.com/questions/47329105
复制相似问题