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

导入的Python模块中的导入语句是如何工作的?,python,import,Python,Import,假设我有以下文件夹结构: project/ a.py module/ b.py c.py __init__.py a.py需要导入b.py,因此它应该包括来自模块导入b的 b.py需要导入c.py,因此它应该只包含import c,因为它们位于同一文件夹中。但是当运行a.py时,会抛出一个ModuleNotFoundError 如果我将b.py中的行从模块导入c切换为,则a.py将运行,但如果我尝试单独运行b.py,它将抛出Mod

假设我有以下文件夹结构:

project/
    a.py
    module/
        b.py
        c.py
        __init__.py
a.py
需要导入
b.py
,因此它应该包括来自模块导入b的

b.py
需要导入
c.py
,因此它应该只包含
import c
,因为它们位于同一文件夹中。但是当运行
a.py
时,会抛出一个
ModuleNotFoundError

如果我将
b.py
中的行从模块导入c切换为
,则
a.py
将运行,但如果我尝试单独运行
b.py
,它将抛出
ModuleNotFoundError

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

在Python 3中,请尝试使用:

from . import c
在模块/b.py文件上

这迫使解释器在本地文件夹中查找模块

您将无法运行b模块(至少不能使用
python模块/b.py
),如果需要将其作为可执行文件,请查看:

正如所建议的,为了运行b模块,您可以

python -m module.b

从父文件夹中。

根据Python版本和
\uuuuuuuuuuuuuuuuuuuu
import c
解释为绝对导入,它基于
PYTHONPATH
中的目录或
Python
命令中调用的脚本。那么你需要相对导入。好的,谢谢。我本来希望
b.py
文件能够提供一些功能,如果它作为main运行,而不是每次都必须运行
a.py
,但这似乎是不可能的。我想解决方案是将该功能放在脚本中,比如
b_main.py
。您可以使用全局导入,如模块导入c中的
,并将包含模块文件夹的文件夹添加到PYTHONPATH中。这是一种可行的方法。