2016-06-12 6 views
6

私はPILで作業しているときに、たくさんのPILモジュールをインポートする必要があります。私はこれを行うには3つの方法を試していたが、最後のものだけがすべてにもかかわらず、作品は私には論理的なものされていますPython PILのインポートが機能しないのはなぜですか?

は、完全なPILをインポートし、それがコードのモジュールです呼び出す:NOPE

すべてをインポート
>>> 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を使用するときに、あなたが実際にあなただけのimport PILPIL.Imageを呼び出そうとするときのに対し、あなたは空のモジュールに属性検索をしようとしている、Image.pyファイルとインポートを見つけます(インポートしませんでしたので、任意のサブモジュール)。

同じ理由が、from PIL import *が機能しない理由にも当てはまります。イメージサブモジュールを明示的にインポートする必要があります。いずれにしても、from ... import *はネームスペースの汚染が発生するため、悪い習慣とみなされます.を使用するのが最善の方法です。

さらに、PILはもはや維持されているが、後方互換性のために、あなたはあなたのコードが(ちょうどimport Imageを使用するoppposedとして)Pillowまだ維持と互換性が残ることを確認することができますfrom PIL import Image使用する必要があります。

関連する問題