ImportError:没有名为 – Python的模块

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

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

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

 from gen_py.lib import MyService 

为了使这个声明起作用,我在MyServer.py的开始处放置了以下行:

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

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

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

我在这里错过了什么?

你修改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模块。

为了使Python模块导入起作用,你的path中必须有“src”,而不是“gen_py / lib”。

当处理像import gen_py.lib这样的import gen_py.lib ,它会查找模块gen_py ,然后查找子模块lib

由于模块gen_py将不在“../gen_py/lib”(它将在“..”中),因此添加的path将无助于导入过程。

根据你从哪里运行它,尝试添加“src”文件夹的相对path。 也许它是sys.path.append('..') 。 你也可以通过像python main/MyServer.py这样的相对path直接在src文件夹内运行脚本

 from ..gen_py.lib import MyService 

要么

 from main.gen_py.lib import MyService 

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

这是如果你正在build立一个软件包,你正在寻找import错误。 我知道这是艰难的方式。答案不是将程序包添加到pythonpath或编程(如果你的模块得到安装,你的命令再次添加?)这是一个坏的方法。

正确的做法是:1)使用virtualenv pyvenv-3.4或类似的东西2)激活开发模式 – $ python setup.py develop

确保包含__init__.py ,这使得Python知道这些目录包含了包