【问题标题】:"ModuleNotFoundError" when importing modules inside package在包内导入模块时出现“ModuleNotFoundError”
【发布时间】:2020-12-21 21:39:03
【问题描述】:

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

文件夹

|- 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。这是我第一次尝试制作包裹,所以我可能会遗漏一些东西。谢谢。

【问题讨论】:

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


【解决方案1】:

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

import .other
import .something

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

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

你可以阅读here关于导入的信息

【讨论】:

  • 感谢您的回复。我对所有导入都这样做了,现在由于某种原因,“from stats import stats”行给了我一个语法错误
  • 这是一个语法错误,但显然将所有导入更改为 stats.moduleName 而不是 .moduleName 正在修复它。当我不得不使用绝对路径时,我的大部分错误似乎都与错误的相对路径有关,反之亦然。我现在应该可以修好了,谢谢!
【解决方案2】:

当您尝试导入一个模块时,您不需要“.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

【讨论】:

  • 感谢您提供信息,但我的问题不在于导入包本身,而是导入包内。我必须将它们转换为相对导入,但现在我在“from stats import stats”行出现语法错误(包称为 stats 并且里面有一个 stats 文件)。
猜你喜欢
  • 2019-07-03
  • 1970-01-01
  • 2021-07-12
  • 2020-09-19
  • 2021-07-05
  • 2021-12-05
  • 2021-07-29
  • 2021-01-26
  • 1970-01-01
相关资源
最近更新 更多