1

SO中有许多问题与此问题略有不同。我见过的答案都没有解决我的问题,所以我问了一个新问题。

我有这个文件夹结构:

/myapp/
   \__init__.py
    模块1.py
    模块2.py

__init__.py 是空的

模块1.py

class TestMod1Class():
    def msg(self):
        print "Hello World!"

模块2.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



我做错了什么?我已经阅读了文档,但仍然无法理解这一点。

4

2 回答 2

5

通过位于文件夹中,您已经在myapp模块中。myapp因此,您不需要使用import myapp.modu1语法,而应该使用import modu1.

例如:

import modu1

obj = modu1.TestMod1Class()
obj.msg() # output: Hello World!

注意:我在 Python 3 中进行了测试,因为我的机器上没有 2,但它应该是相同的(我确实编辑了 modu1 以使用新print语法)。

于 2013-07-31T00:08:20.060 回答
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.

于 2013-07-31T00:12:57.240 回答