在SO中存在许多问题,这个问题略有不同。我见过的答案都没有解决我的问题,所以我问了一个新问题。
我有这个文件夹结构:
/myapp/ \__init__.py modu1.py modu2.py
__init__.py
为空
modu1.py
class TestMod1Class():
def msg(self):
print "Hello World!"
modu2.py
import myapp.modu1
obj = myapp.modu1.TestMod1Class()
obj.msg()
如果从目录/ myapp /我运行python modu2.py
我得到:
Traceback (most recent call last):
File "modu2.py", line 1, in <module>
import myapp.modu1
ImportError: No module named myapp.modu1
我做错了什么?我读过the docs,但仍然无法理解这一点。
答案 0 :(得分:6)
您已位于myapp
模块中,位于myapp
文件夹中。因此,您不需要使用import myapp.modu1
语法,而应使用import modu1
。
例如:
import modu1
obj = modu1.TestMod1Class()
obj.msg() # output: Hello World!
注意:我在Python 3中测试过,因为我的机器上没有2,但它应该是相同的(我编辑modu1以使用新的print
语法)。
答案 1 :(得分:2)
如果从目录/ myapp /我运行
python modu2.py
我得到
如果直接运行模块,它不会作为它可能属于的包的一部分运行。因此,导入myapp.modu1
会查找myapp/myapp/modu1.py
,这显然不是它的位置。
如果您希望myapp
包工作,则必须从根目录开始执行。因此,在main.py
文件夹旁边添加myapp
:
/main.py
/myapp
/__init__.py
/modu1.py
/modu2.py
从那里,你可以做到:
import myapp.modu2
然后你必须从python main.py
开始。