相对导入妥协[重复]

问题描述 投票:0回答:1

我想在

foo.py
main.ipynb
中导入
main.py
。这是我的目录结构:

./
    main.ipynb # from src.foo import *
    src/
        foo.py # from .bar import * # NOTICE DOT HERE
        bar.py
        main.py # from foo import *

通过此设置,

main.ipynb
运行良好,但
main.py
出现错误。

所以我尝试了不同的结构:

./
    main.ipynb # from src.foo import *
    src/
        foo.py # from bar import * # NOTICE NO DOT HERE
        bar.py
        main.py # from foo import *

使用此设置,

main.ipynb
会出错,而
main.py
运行正常。

如何设置导入以使

main.ipynb
main.py
都可以工作?

就上下文而言,最终目标是我希望我的 GitHub 存储库包含除 docker 映像之外的所有内容,仅包含 src 文件夹。

python jupyter-notebook python-import python-packaging
1个回答
0
投票

要使用正确的相对导入,您应该将

__init__.py
文件添加到文件夹
src
以使其成为 python 包。所以在你的情况下:

./
    main.ipynb # from src.foo import *
    src/
        __init__.py
        foo.py # from .bar import * # NOTICE DOT HERE
        bar.py
        main.py # from foo import *

它应该有效。

© www.soinside.com 2019 - 2024. All rights reserved.