我对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)
也不显示mod11
或mod12
。
我好像错过了一些很简单的东西。
(我在Ubuntu10.10中使用Python2.6)
谢谢你
更准确地说,您的
mod1
和lib
目录不是模块,而是包。文件mod11.py
是一个模块。Python不会自动导入子包或模块。您必须显式地这样做,或者通过在初始值设定项中添加import语句来“欺骗”。
另一种方法是使用
from
语法将模块从包“拉”到脚本命名空间中。然后将函数引用为简单的
mod11.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
。相关问题 更多 >
编程相关推荐