从 Python 中的子文件夹导入本地模块时出现 ModuleNotFoundError

ModuleNotFoundError when importing local module from sub folder in Python

文件组织

./helper.py
./caller1.py
./sub_folder/caller2.py

caller1.py导入helper.py没问题。

caller1.py

from helper import hello
if __name__ == '__main__':
    hello()

但是当使用 完全相同的代码./sub_folder/caller2.py 导入时,我得到了错误...

ModuleNotFoundError: No module named 'helper'

我想把文件整理到子文件夹中,因为项目很大。

您必须了解 Python 在使用导入时如何找到模块和包。

当您执行 python 代码时,此文件所在的文件夹将被添加到 PYTHONPATH,它是 python 将在其中查找您的包和模块的所有位置的列表.

当您调用 caller1.py 时,它会起作用,因为 helper.py 在同一文件夹中,但它对 caller2.py 不起作用,因为 python 在相同的文件夹或 PYTHONPATH 中的其他路径。

您有三个选择:

  • 从与助手相同的文件夹中的脚本调用 caller2.py
  • 在PYTHONPATH中添加包含helper.py的文件夹(不推荐)
  • 将您的代码打包成一个您可以 pip install -e 的包,这样 python 将能够找到您的模块,因为它们将安装在您 [=33= 的站点包中] 环境(最复杂但最干净的解决方案)

为了解决这个问题, 您可以使用 sys 模块在系统中添加该文件的路径,然后您可以导入该特定文件。

就像你的情况一样

caller2.py

import sys
sys.path.insert(0, "C:/Users/D_Gamer/Desktop/pyProject/helperDir")
# You need to provide path to the directory in which you have a helper file so basically I have "helper.py" file in "helperDir" Folder

from helper import hello

if __name__ == '__main__':
    hello()

还有其他方法可以达到同样的目的,但现在你可以坚持下去, 有关更多信息,请查看 Github

上的参考资料