问题描述
显示我的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 *