我的目录中包含许多.py
个文件。每个文件定义一些类。我在目录中也有一个空的__init__.py
。
例如:
myproject
__init__.py
mymodule
__init__.py
api.py
models.py
views.py
我正在尝试导入mymodule
并访问所有这些文件中定义的类:
from myproject import mymodule
print mymodule.api.MyClass
我错误地说mymodule
没有属性api
。为什么?为什么我只能访问其中一个文件(models.py
)而不访问其他文件?
In [2]: dir(banners)
Out[2]:
['__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'__path__',
'models']
答案 0 :(得分:36)
问题是子模块不会自动导入。您必须显式导入api
模块:
import myproject.mymodule.api
print myproject.mymodule.api.MyClass
如果您在导入api
时确实坚持myproject.mymodule
可用,则可以将其放入myproject/mymodule/__init__.py
:
import myproject.mymodule.api
然后这将按预期工作:
from myproject import mymodule
print mymodule.api.MyClass
答案 1 :(得分:4)
如果您像我一样是白痴,那么还要检查您是否没有将python文件命名为与尝试导入的模块相同的名称。
答案 2 :(得分:2)
myproject目录中也需要__init__.py
。所以你的模块结构应该是:
myproject
__init__.py
mymodule
__init__.py
api.py
models.py
views.py
答案 3 :(得分:1)
模块不会那样工作。
from myproject.mymodule import api
print api.MyClass