2017-11-16 7 views
1

「インポートPIL; PIL.Image」は機能しませんが、「PILインポートイメージから」はどうしてですか? 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'> 

はなぜ「PILインポートイメージから」などのインポートを行う必要がありますか?私は "この動作を可能にする、Pythonのインポートの基礎となる作業は何ですか?" 「PILパッケージはなぜこのように動作するように設計されたのですか?」

また、私は本当にプログラミング時にクリーンな名前空間を保つのが好きです。私は私のコードでPIL.Imageを使用したい場合は、私は次のようにインポートする必要があります。

>>> import PIL 
>>> from PIL import Image 
>>> del Image 

か良い方法はありますか?

+0

Bécause画像はモジュール –

+0

@VasilisGです。修飾されていない名前を使用すると* less *クリーンなコードが作成され、速度の違いはほとんどありません。 –

答えて

1

あなたはPIL.Imageをインポートすることもできます

import PIL.Image 
PIL.Image.open('my_pic.jpg') 

私は枕が原因で、パッケージの歴史をこのように構成されていると思います。元のパッケージPILimport Imageを許可しました。 Python 3をサポートするPILのフォークであるピローは、ImagePIL名前空間に移動しました。提案された輸入品from PIL import Imageは、PILから枕に簡単に切り替えることができます。詳細は、porting docsを参照してください。 Pythonは再帰的にサブモジュールをインポートしないため

0

PIL.Imageは、

import PIL 

PILのサブモジュールであるので、自動でインポートされることはありません。

5.4.2. Submodulesは、サブモジュールのインポートの動作を理解するのに役立ちます。

任意のメカニズムを使用してサブモジュールをロードすると、バインディングはサブモジュールオブジェクトの親モジュールの名前空間に配置されます。

ので、サブモジュールをインポートしてロードした後、

import PIL 
from PIL import Image 

あなたはPIL.Image経由でアクセスすることがあるが、これはPILモジュールをインポートする際PIL.Imageがロードされているわけではありません。

import package.submodule 

か::


また、私はこれを明示的にどこにも述べたが、私がテストしたものから見つけることができなかった、あなたがサブモジュールのいずれかなどをインポートするときにことのようです

from package import submodule 

親パッケージもプロセスにロードされます。