时常遇到下面这种错误,其中 'ssim_module' 是模型自带的 py 文件。
ModuleNotFoundError: No module named 'ssim_module'
可以参考下面的链接打印当前 python 的搜索路径:
import sys
print(sys.path)
运行 IGD 下的 py 文件时,打印的路径为:
可以看到在 E:\python\clone\IGD> 的路径下,python 的搜索路径除了基础路径,只会增加一条 'e:\\python\\clone\\IGD' ,因此在运行命令的时候要以 IGD 为基点,在编写文件夹内部文件的时候,也要注意 import 的引用层次。
例如本示例中的,运行代码
python -m p32.ssim_main --num 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 --sample_rate 1.0
无法找到跟自己同一个文件夹的 py 文件,需要加上前缀 p32 才能找到,因为搜索路径只到 IGD。
有些同学遇到搜索路径的问题会使用直接拷贝 py 文件的方法,不到万不得已不推荐直接拷贝文件的方式解决。
还有一种方式:添加搜索路径
通过在python文件中添加以下代码,可将当前工作目录添加至python搜索路径。
import os
import sys
sys.path.insert(0, os.path.abspath('.'))
20240724更新:
又遇到类似问题:文件夹关系是,文件夹pass中有文件夹src,文件夹src中有d.py和c.py,其中d.py中有代码 from src.c import *,运行报错 no module named src
某智能软件给出答案是:
尝试了第1种方法,使用方法1,from .Config import Config 结果 ImportError: attempted relative import with no known parent package
它的答案仅供参考,目前有效的办法是,去掉from XX,直接import d,其中d.py中只定义了一个class d。这可能跟py文件本身的结构有关,还有init.py等。
总的来说,from 后面的第一个名字,应该是当前 运行路径 运行路径 运行路径 后的第一个文件或文件夹名称。