2013-11-09 9 views
6

をインポートしていない私はimport *が悪いことを知っているが、私は時々私は輸入にPythonの: `のxインポートから*`すべて

を入力するか、覚えてするのが面倒に感じるとき、私は、次のコードをしようとしています迅速なプロトタイピングのためにそれを使用します:

from OpenGL.GL import * 

shaders.doSomething() 

それはエラーになります: `NameError:私は輸入を変更する場合はグローバル名 'シェーダは'「

が定義されていません。

from OpenGL.GL import * 
from OpenGL.GL import shaders 

shaders.doSomething() 

エラーが表示されません。 *shadersが含まれていないのはなぜですか?

+1

'OpenGL.GL.shaders'は' OpenGL.GL'で定義されたオブジェクトではなく、サブパッケージです。 – Cameron

+0

シェーダはモジュールですか? – sapi

+0

http:// stackoverflow。com/a/64130/1265154 – alko

答えて

3

shadersサブモジュール、関数ではなく。

構文from module import somethingは、サブモジュール(別の答えとして、__all__で定義されていない)をインポートしません。

モジュールを取るために、あなたは、具体的にそれをインポートする必要があります:

from OpenGL.GL import shaders 

かを、あなただけshadersのいくつかの機能を持つようにしたい場合:

from OpenGL.Gl.shaders import function1, function2, function3 

そして、あなたがしたい場合shadersのすべての機能を使用するには、次を使用してください。

from OpenGL.Gl.shaders import * 

0

私は自分の状況からこれを学びました。モジュールは他のパッケージとともに自動的にインポートされませんでした。その経験の前に私の間違った理解は、すべてのパッケージのモジュールがimport xまたはfrom x import *から自動的にインポートされることでした。彼らはしません。

初心者はこれらの呼び出しの下ですべてをインポートすると思うかもしれませんが、私は信じています。しかし、それはそうではないということを示して共通であるGUIプログラミングコード、以下:上記の例では

from tkinter import * 
from tkinter import ttk 

、モジュールttkは、例えば、tkinterパッケージの残りの部分と一緒に自動的にインポートされません。私が言われてきた

説明は次のとおりです。あなたがfrom x import *を使用するときに、あなたが実際にフォルダのみですyour-python-location/lib/x/__init__.py

パッケージで物事を輸入しました。モジュールはファイルです。インポートで特定のファイルが必要な場合は、パッケージフォルダの__init_.pyがインポートする特定のファイルを列挙します。

関連する問題