尝试从导入到父模块中的嵌套子模块访问方法时,不会遇到模块错误

时间:2019-03-25 11:55:52

标签: python python-import

我有一个像这样的包

fsb
├── core.py
├── __init__.py
└── view_boosters
    ├── __init__.py
    ├── responses.py

此处使用的Python版本是Python 2.7

response.py模块有一个名为error_json

的方法。

以前,它的结构方式是将response.py模块放在根文件夹中-因此,有很多客户端代码可以导入像这样的功能

from fsb.responses import error_json

现在,新结构要求将所有客户端导入更改为

from fsb.view_boosters.responses import error_json

我希望避免对数百个文件进行此更改。因此,我想到了将响应模块导入fsb。 init .py文件本身

fsb/__init__.py

的内容
from .view_boosters import responses

现在,当我尝试从这样的客户端代码访问时,出现模块未找到错误

In [3]: from flask_sqlalchemy_booster.responses import error_json
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-3-90d5505228fb> in <module>()
----> 1 from flask_sqlalchemy_booster.responses import error_json

ImportError: No module named responses

虽然单独导入模块还是可以的

from flask_sqlalchemy_booster import responses

以上工作正常。

这是怎么回事?为什么后者可能,而前者却不可能?如果问题出在python无法在其sys路径中识别响应模块,那么在第二种情况下它也应该抛出错误。但是在第二种情况下它能够识别响应模块,但在第一种情况下无法识别响应模块。

我尝试将fsb.__init__.py更改为类似的内容

import view_boosters.responses as responses

这也没有任何效果。

使用python 2.7的导入系统无法实现上述目标吗?

0 个答案:

没有答案