在包中导入模块时出现“ModuleNotFoundError”

时间:2020-12-21 21:39:03

标签: python python-3.x python-packaging

我正在尝试制作自己的包,以便可以使用不同文件夹中的文件。这个包包含几个不同的模块,然后是导入所有其他模块的主模块。例如:

文件夹

|- main.py
|- other.py
|- something.py
|- __init__.py

在 main.py 里面我有导入:

import other
import something

并且在运行文件本身时它工作得很好;但是,我添加了 __init__.py 文件并尝试将其导入到不同的文件夹中。包被识别,但 main.py 给了我以下错误:

<块引用>

发生异常:ModuleNotFoundError No module named '单变量'

文件“C:...\stats.py”,第 8 行,在 导入单变量

文件“F:...\testing.py”,第 7 行,在 从统计导入统计

为了澄清起见,实际的主文件称为 stats.py。这是我第一次尝试制作一个包裹,所以我可能会遗漏一些东西。谢谢。

2 个答案:

答案 0 :(得分:1)

您需要将导入更改为相对导入

import .other
import .something

或将其更改为以您的项目文件夹为根的绝对导入

import x.y.other
import x.y.something

您可以阅读 here 关于导入

答案 1 :(得分:1)

当您尝试导入一个模块时,您不需要“.py”部分。

拥有一个包含 init.py 文件(甚至是空白文件)的文件夹意味着包含该文件夹的项目可以从中导入。

/myproject
| - /mymodule
| - |- stats.py
| - |- other.py
| - |- something.py
| - |- __init__.py
| - main.py

然后在 main.py 中您需要做的就是 import mymodulefrom mymodule import stats

我总是讨厌 FTFM 某人,但这里是如何从 official documentation 构建软件包的链接。但是,当您需要打包模块以便其他人可以运行它时,这才真正开始发挥作用时,Digital Ocean 有一个非常好的教程 here