欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ModuleNotFoundError: No module named '__main__.xxx'; '__main__' is not a package

程序员文章站 2022-07-14 21:15:53
...

目录结构和内容

ModuleNotFoundError: No module named '__main__.xxx'; '__main__' is not a package

# 1
list_before=[2,4,9,3,4,5,2,1,5,6,4,2,7,8,6,0]
from .. import quick_sort
quick_sort.quickSort2(list_before)
# ValueError: attempted relative import beyond top-level package

# 2
from .funconfig import f2
f2()
# ModuleNotFoundError: No module named '__main__.config'; '__main__' is not a package

# 3
from test.tModule.funconfig import f2  # 绝对路径导入,成功运行,打印两边内容
f2()

#4
# 右击tModule --> make directory as source root
from funconfig import f2   # 直接忽略tModule的存在
f2()  # funconfig.py

注:大家只要在编辑我们的文章时,加入如下所示的py标记,我们的代码片就会变成如上所示的.
ModuleNotFoundError: No module named '__main__.xxx'; '__main__' is not a package```

Imagination:

原文地址:
https://*.com/questions/41816973/modulenotfounderror-what-does-it-mean-main-is-not-a-package/41817024#41817024

Translation(我把它结合到我的案例2中,代码如上 #2 所示):

我认为核心问题是当您使用点导入时,例如:

from .funconfig import f2。

它相当于:

from main.funconfig import f2。

我们都知道,这__main__是指您当前的模块1.py(正是从此文件导入 f2 ,namemain )。

问题出现了:

当解释器进入时1.py,脚本等于:

from 1.funconfig import f2

显然,1.py 不包含任何名为f2 的模块或实例。

简而言之,解释器不知道您的目录体系结构。

所以我提出了一个更清晰的解决方案,而没有更改python环境变量(在查询 导入请求 在相对导入中的工作方式之后):

该目录的主要架构是:

main.py

setup.py

—problem_set_02/

------init.py

------p01.py

------p02.py

------p03.py

然后写下__init__.py:

from .p_02 import f2(p_92中的函数)
这__main__是__init__,它正是指模块problem_set_02。

然后去main.py

import problem_set_02
运行main.py,即可看到成果f2中的执行结果
您还可以编写一个setup.py以向环境添加特定模块。