ModuleNotFoundError: No module named main__.xxx NOT ACK

目录结构和内容

ModuleNotFoundError: No module named main__.xxx NOT ACK_第1张图片

# 1 联系至上方思维导图的 tModule包 下的脚本
from .. import quick_sort
list_before=[2,4,9,3,4,5,2,1,5,6,4,2,7,8,6,0]
quick_sort.quickSort2(list_before)
# 报错:ValueError: attempted relative import beyond top-level package


# 2
from .funconfig import f2  # 从当前目录查找funconfig,404 not found
f2()
# 即使是相同包内 通过相对导入 还是报如下的错
# 报错信息:ModuleNotFoundError: No module named '__main__.config'; '__main__' is not a package
# 因为相对导入没有指定具体的报名,解释器将其默认设置为__main__

# 3
from test.tModule.funconfig import f2  # 绝对路径导入,成功运行
f2()  # funconfig.py

#4
# 右击tModule --> make directory as source root
from funconfig import f2   # 解释器在执行时自动从source root 开始查找
f2()  # funconfig.py

Imagination:

原文地址:
https://stackoverflow.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 ,__name__  为  __main__ )。

问题出现了:

当解释器进入时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以向环境添加特定模块。

Shoulders of Giant

ValueError: attempted relative import beyond top-level package

你可能感兴趣的:(Python)