为什么不能加载模块?

问题描述

显示我的O(|S|^2)的目录结构:

|d|

project.py中的内容:

t

project中的内容:

tree project
project
├── config.py
├── __init__.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共享相同的名称?
为什么同一个名字重要?

解决方法

如果您尝试查看__package__中的project.py,则在import project文件夹中project/以及{{ 1}}就在文件夹外面。这是因为,当您在文件夹中时,您正在导入模块 import project(即project文件),并且是从project.py文件夹外部导入的正在导入project/ 软件包(即您正在运行project文件)。

编写__init__.py时,您希望从当前程序包内部导入from . import x,但是由于没有程序包上下文,因此不能x

,

根据此答案: https://stackoverflow.com/a/35710527/4393278

__all__的作用是什么?

它从模块中声明语义上的“公共”名称。如果全部中有一个名称,则希望用户使用它,并且可以期望它不会更改。

`全部 = ['foo','Bar'] 表示从模块导入*时,仅导入 all 中的那些名称。

因此,如果要导入__all__文件中的任何内容,则无需定义project.py。另外我认为您不应该通过其路径导入文件。 因此,在您的__init__文件中,应该是这样。

from .project import *
from .config import *

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...