"ModuleNotFoundError" 在包内导入模块时

"ModuleNotFoundError" when importing modules inside package

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

文件夹

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

在 main.py 里面我有导入:

import other
import something

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

Exception has occurred: ModuleNotFoundError No module named 'univariate'

File "C:...\stats.py", line 8, in import univariate

File "F:...\testing.py", line 7, in from stats import stats

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

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

import .other
import .something

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

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

您可以阅读here关于导入的内容

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

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

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

那么在main.py中你需要做的就是import mymodulefrom mymodule import stats

我总是讨厌 FTFM 某人,但这里有一个 link 如何从 official documentation. But, where this really starts to shine is when you need to package your module so that someone else can run it Digital Ocean has a pretty good tutorial here.

构建包