project
__init__.py
config.py
mould.py
modules
__init__.py
core
__init__.py
core.py
db.py
models.py
这里提到的“模块目录”与Python模块不同,它们是为了给我的项目(核心模块、foo模块、bar模块等)提供模块化结构。现在,模块目录中的每个文件夹(和其中同名的模块,如
core.core
)都通过以下方式在我的主Flask应用程序(mould.py
)中进行动态导入:for item in os.listdir("modules"):
if not os.path.isfile("modules" + os.sep + item) and not item.startswith("__"):
ppath = "modules" + "." + item
fullpath = "modules" + "." + item + "." + item
module = importlib.import_module(fullpath)
app.register_blueprint(module.app)
print("Registered: " + ppath)
由于这个原因,我无法在像
db.py
这样的模块脚本中执行此操作。import models
由于整个模块在项目级别下执行时会产生路径错误,因此我不得不这样做:
from . import models
这解决了问题,我成功地导入了所有模块。但是,当我进入核心模块目录进行故障排除并启动Python解释器时,它不允许我导入db模块:
>>> import db
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "db.py", line 7, in <module>
from . import models
ImportError: attempted relative import with no known parent package
有没有解决办法?这样,我既可以在代码中成功导入db模块,也可以在解释器中成功导入。
walk_packages(modules.__path__, modules.__name__ + '.')
。由于看起来您正在使用Python2,我建议在所有文件的顶部添加from __future__ import absolute_import
。 - anthony sottileimport db
而不是from modules.core import db
? - univerio