2016-06-12 1 views
6

PIL과 함께 작업 할 때 많은 PIL 모듈을 가져와야합니다. 나는이 작업을 수행하는 세 가지 방법으로 실험을했지만, 마지막 하나의 작품 모두가 나에게 논리적되고있는에도 불구하고 : 전체 PIL을 가져 오기파이썬 PIL 가져 오기가 작동하지 않는 이유는 무엇입니까?

를하고 코드에서 모듈의 호출 : 아니

>>> import PIL 
>>> image = PIL.Image.new('1', (100,100), 0) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'Image' 

모든 것을 가져 오기

>>> from PIL import * 
>>> image = Image.new('1', (100,100), 0) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'Image' is not defined 

PIL에서 일부 모듈을 가져 NOPE :

>>> from PIL import Image 
>>> image = Image.new('1', (100,100), 0) 
>>> image 
<PIL.Image.Image image mode=1 size=100x100 at 0xB6C10F30> 
>>> # works... 
OK PIL에서

나는 여기에 무엇을하지 않았는가?

답변

3

PIL은 하위 모듈을 가져 오지 않습니다. 이것은 실제로 매우 일반적입니다. 당신이 from PIL import Image를 사용할 때

그래서, 당신은 실제로 Image.py 파일을 찾아 가져, 당신이 단지 import PILPIL.Image를 호출 할 때 당신이 수입되지 않았기 때문에, 당신은 빈 모듈 속성 조회 (을 시도하고있는 반면 임의의 서브 모듈).

from PIL import *이 작동하지 않는 이유는 동일한 추론이 적용됩니다. 명시 적으로 이미지 하위 모듈을 가져와야합니다. 어쨌든 from ... import *은 네임 스페이스 오염으로 인해 나쁜 관행으로 간주됩니다. 가장 좋은 방법은 from PIL import Image을 사용하는 것입니다.

또한, PIL는 더 이상 업데이트되지 않지만 이전 버전과의 호환성을 위해 당신은 당신의 코드가 (단지 import Image를 사용하는 oppposed로) Pillow 여전히-유지와 호환 유지됩니다 보장 할 수 from PIL import Image 사용해야합니다.