ImportError:没有名为的模块 - Python

68 投票
6 回答
175394 浏览
提问于 2025-04-17 03:17

我有一个Python应用程序,目录结构如下:

src
 |
 +---- main
 |
 +---- util
 |
 +---- gen_py
         |
         +---- lib

main这个包里,我有一个名为MyServer.py的Python模块,它里面有一行导入语句,像这样:

from gen_py.lib import MyService

为了让这行导入语句能正常工作,我在MyServer.py的开头加了以下这一行:

import sys
sys.path.append('../gen_py/lib')

但是当我在终端运行MyServer.py的时候,出现了以下错误:

ImportError: No module named gen_py.lib

我这里缺少了什么呢?

6 个回答

5
from ..gen_py.lib import MyService
from main.gen_py.lib import MyService

或者

确保每个目录里都有一个(至少是空的)__init__.py 文件。

6

要让Python模块的导入正常工作,你的路径里必须有“src”,而不是“gen_py/lib”。

当你处理像 import gen_py.lib 这样的导入时,Python会先找一个叫 gen_py 的模块,然后再找它里面的一个叫 lib 的子模块。

但是,模块 gen_py 不会在 "../gen_py/lib" 这个地方(它应该在 ".." 这个位置),所以你添加的路径对导入过程没有任何帮助。

根据你运行代码的地方,试着把相对路径指向“src”文件夹。也许可以用 sys.path.append('..')。你也可以尝试直接在src文件夹里运行脚本,比如用相对路径 python main/MyServer.py

80

你对 sys.path 的修改是基于当前工作目录总是在 main/ 这个文件夹下。但实际上并不是这样。你只需要把上一级目录添加到 sys.path 中就可以了:

import sys
import os.path

sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import gen_py.lib

别忘了在 gen_py 和 lib 文件夹里放一个 __init__.py 文件,否则它们不会被当作 Python 模块来识别。

撰写回答