Python:`来自x import *`不导入所有内容

时间:2013-11-09 22:27:13

标签: python python-import

我知道import *很糟糕,但是当我觉得懒得键入或记住导入时,我有时会用它来快速进行原型设计

我正在尝试以下代码:

from OpenGL.GL import *

shaders.doSomething()

导致错误:`NameError:全局名称'着色器'未定义'

如果我更改导入:

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

shaders.doSomething()

错误消失。为什么*不包含shaders

3 个答案:

答案 0 :(得分:8)

如果shaders是子模块且it’s not included in __all__from … import *将无法导入。

And yes, it is a submodule.

答案 1 :(得分: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 *

希望这有帮助!

答案 2 :(得分:0)

我从自己的情况中学到了这一点。模块未自动导入包的其余部分。在那次体验之前,我的错误理解是每个软件包的模块都会自动从import xfrom x import *导入。他们没有。

初学者可能期望在这些电话下导入一切,我相信。但是下面的GUI编程代码很常见,表明情况并非如此:

from tkinter import * 
from tkinter import ttk

在上面的示例中,模块ttk不会与tkinter包的其余部分一起自动导入。

我被告知的解释如下:当您使用from x import *时,实际上只导入了your-python-location/lib/x/__init__.py中的内容

包是文件夹。模块是文件。如果导入调用特定文件,则包文件夹__init_.py将枚举要导入的特定文件。