一个导入的 Python 模块中的 import 语句是如何工作的?

3
假设我有以下文件夹结构:
project/
    a.py
    module/
        b.py
        c.py
        __init__.py

a.py需要导入b.py,因此应该包括from module import b

b.py需要导入c.py,所以应该简单地包括import c,因为它们在同一个文件夹中。但是当运行a.py时,会抛出ModuleNotFoundError

如果我将b.py中的这一行改为from module import c,那么a.py将会运行,但如果我尝试仅运行b.py,它会抛出ModuleNotFoundError

Python中正确的导入方式是什么?


根据 Python 版本和 __future__import c 可以被解释为基于 PYTHONPATH 中的目录或者在 python 命令中调用的脚本的绝对导入。此时,你需要使用相对导入。 - Michael Butscher
1个回答

1
在Python 3中尝试使用:


from . import c

在你的模块/b.py文件中。

这会强制解释器在本地文件夹中查找模块。

如果你需要将其作为可执行文件运行,你将无法运行b模块(至少不能使用python module/b.py),也许可以看一下:

Python 3中的相对导入

如建议所示,要运行你的b模块,你可以执行以下操作

python -m module.b

从父文件夹中。


好的,谢谢。我本来想让 b.py 文件在作为主文件运行时提供一些功能,而不是每次都要运行 a.py,但看起来这是不可能的。我猜解决方案是将该功能放入像 b_main.py 这样的脚本中。 - MannerPots
你可以使用全局导入,如from module import c,并将包含模块文件夹的文件夹添加到你的PYTHONPATH中。这是一种可能的方法。 - DSLima90

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接