首页 > 解决方案 > 为什么无法加载模块?

问题描述

显示 my project的目录结构:

tree project
project
├── config.py
├── __init__.py
└── project.py

project.py 中的内容:

from . import config

def main():
    pass

if __name__ == '__main__':
    main()

内容__init__.py

__all__ = ['project','config']
from project import * 
from . import config

config.py为简单起见为空白。

加载模块:

cd  project
import project

它遇到错误信息: Parent module '' not loaded, cannot perform relative import

为什么不能import project?我发现如果project.py重命名为myproject.py,保持任何其他的东西和以前一样,import project都可以工作。
包不project与模块同名project.py吗?
为什么相同的名字很重要?

标签: importmodulepython-3.6

解决方案


如果您尝试查看__package__from project.py,您会发现当您import projectproject/文件夹内和在文件import project夹外时,它从无变化。这是因为,当您在文件夹内时,您正在导入模块 project(即project.py文件),而从project/文件夹外您正在导入project (即您正在运行__init__.py文件)。

编写时from . import x,您希望x从当前包内部导入,但没有包上下文,因此它不能import .


推荐阅读