ImportError:没有名为的模块 - Python

F. *_*mir 66 python import

我有一个python应用程序具有以下目录结构:

src
 |
 +---- main
 |
 +---- util
 |
 +---- gen_py
         |
         +---- lib
Run Code Online (Sandbox Code Playgroud)

在包main中,我有一个名为MyServer.py的python模块,它有一个import语句,如:

from gen_py.lib import MyService
Run Code Online (Sandbox Code Playgroud)

为了使这个语句起作用,我将以下行放在MyServer.py的开头:

import sys
sys.path.append('../gen_py/lib')
Run Code Online (Sandbox Code Playgroud)

当我在终端中运行MyServer.py时,出现以下错误:

ImportError:没有名为gen_py.lib的模块

我在这里缺少什么?

phi*_*hag 78

您的修改sys.path假定当前工作目录始终在main/.不是这种情况.相反,只需将父目录添加到sys.path:

import sys
import os.path

sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import gen_py.lib
Run Code Online (Sandbox Code Playgroud)

不要忘记__init__.py在gen_py和lib中包含一个文件- 否则,它们将不会被识别为Python模块.


lun*_*chs 6

要使Python模块导入起作用,您的路径中必须有"src",而不是"gen_py/lib".

处理类似导入时import gen_py.lib,它会查找模块gen_py,然后查找子模块lib.

由于模块gen_py不在"../gen_py/lib"中(它将在".."中),因此您添加的路径将无助于导入过程.

根据您运行它的位置,尝试添加"src"文件夹的相对路径.也许是的sys.path.append('..').您也可以通过相对路径直接在src文件夹中运行脚本python main/MyServer.py


JBe*_*rdo 5

from ..gen_py.lib import MyService
Run Code Online (Sandbox Code Playgroud)

要么

from main.gen_py.lib import MyService
Run Code Online (Sandbox Code Playgroud)

确保__init__.py每个目录上都有一个(至少为空)文件.