我一直在研究python3应用程序,但遇到一个奇怪的问题,在使我非常烦恼之后,我开始好奇了。
我的文件结构是这样的:
root/
| __init__.py
| main.py
| fuzzy/
| __init__.py
| foo.py
| dreamy/
| __init__.py
| bar.py
| meh.py
所以我需要在foo
和bar
中都使用meh
模块的方法。
在bar
中,我写道:
from fuzzy.foo import foo_function
那工作得很好。
现在在meh
中,我使用了完全相同的语法,但最终出现导入错误:
ModuleNotFoundError: No module named 'fuzzy'
我设法使用this方法解决了这个问题,但我想了解为什么会这样。
根据Python3 documentation,我的导入语法正确:
导入子模块的另一种方法是:
from sound.effects import echo
这似乎也是answered question on this forum
提供的语法此外,bar
和meh
都位于同一目录中,并且它们的代码以完全相同的方式开头。
有人知道为什么在一个文件中而不是另一个文件中发生此错误吗?
我做错了什么吗?
如果我做错了什么,导入本地包/方法的正确方法(或良好做法)是什么?
感谢您的见识。
---编辑---
我没有以任何方式摆弄PYTHONPATH
,而是从(香草的)Conda venv运行Python3。为了获得良好的效果,我还创建了一个新的文件结构,并将代码复制到新的空白文件中。这是为了确保目录中不会发生任何“有趣”的事情。
答案 0 :(得分:0)
这个问题似乎非常简单,但是我确实注意到其他人为此感到困惑。
尽管我通过Baum mit Augen找到了问题的答案。
Baum mit Augen花了一些时间写this answer,它很有启发性并且写得很好。
所以总结一下我的问题: 在开发中,我试图通过从终端启动bar.py来调用函数。这意味着bar是 main ,但位于包子目录中。这会导致导入错误,因为“其名称不会显示它在包装中”。
我只想强调与我的问题无关的两件事: