导入的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中。这是一种可行的方法。