Python错误:AttributeError:“module”对象没有attribu

2024-05-18 17:52:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python很陌生,我知道这个问题被问过很多次,但不幸的是,我的情况似乎有点不同。。。 我已经创建了一个包(或者我认为是这样)。目录树如下:

mydir
    lib   (__init__.py)
    mod1  (__init__.py, mod11.py)

括号中是目录中的文件。两个__init__.py文件都是零长度。

文件mydir/lib/mod1/mod11.py包含以下内容:

def mod12():
    print "mod12"

现在,我运行python,然后运行import lib,运行正常,然后运行lib.mod11()lib.mod12()

最后两个选项中的任何一个都会给出主题错误消息。实际上,步骤2之后的dir(lib)也不显示mod11mod12。 我好像错过了一些很简单的东西。

(我在Ubuntu10.10中使用Python2.6)

谢谢你


Tags: 文件pyimport目录initlibdef情况
3条回答

更准确地说,您的mod1lib目录不是模块,而是包。文件mod11.py是一个模块。

Python不会自动导入子包或模块。您必须显式地这样做,或者通过在初始值设定项中添加import语句来“欺骗”。

>>> import lib
>>> dir(lib)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
>>> import lib.pkg1
>>> import lib.pkg1.mod11
>>> lib.pkg1.mod11.mod12()
mod12

另一种方法是使用from语法将模块从包“拉”到脚本命名空间中。

>>> from lib.pkg1 import mod11

然后将函数引用为简单的mod11.mod12()

我要做的是让初始化文件为空,然后:

import lib.mod1.mod11
lib.mod1.mod11.mod12()

或者

from lib.mod1.mod11 import mod12
mod12()

您可能会发现mod1 dir是不必要的,只是在lib中有mod12.py。

当您import lib导入包时。在这种情况下,唯一要计算和运行的文件是lib目录中的0字节__init__.py

如果你想访问你的函数,你可以这样做from lib.mod1 import mod1,然后像这样运行mod12函数mod1.mod12()

如果希望在导入lib时能够访问mod1,则需要在lib目录中的__init__.py文件中放置一个import mod1

相关问题 更多 >

    热门问题