python 中的相对路径导入问题

Problems with relative path import in python

我有一个具有此目录结构的项目

我想从 notebook01.ipynb 导入来自 functions.py 的 def。 我遵循了相对路径导入 here and studied the answers in this stack overflow post.

的文档

我尝试写入 from .Modules.functions import fibonacci,(在 Modules 文件夹前有一个点)我收到以下错误。

ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-2-be5f30231faa> in <module>
----> 1 from .Modules.functions import fibonacci

ModuleNotFoundError: No module named '__main__.Modules'; '__main__' is not a package

然后我尝试在 Modules 文件夹前添加两三个点 from ..Modules.functions import fibonacci 然后我得到了错误

ValueError                                Traceback (most recent call last)
<ipython-input-3-8d1656059c1f> in <module>
----> 1 from ..Modules.functions import fibonacci

ValueError: attempted relative import beyond top-level package

我已经按照文档的建议在目录结构的每个级别添加了 __init__.py 文件]2 如您所见,但一点运气都没有!

我做错了什么?

老实说:相对导入可能是地狱。这就是 Python 3 默认执行绝对导入的原因 (https://docs.python.org/2.5/whatsnew/pep-328.html)。

如果你使用 Python 3 - 使你所有的包都是绝对的。

如果您仍然使用 Python 2,您可以通过在顶部添加以下行来切换默认行为:

from __future__ import absolute_import