ImportError:没有名为的模块 - Python
我有一个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 模块来识别。