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知道这些目录包含了包