从 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
上的参考资料
文件组织
./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
上的参考资料