同目录文件存在却触发ModuleNotFoundError的原因求助
以下是可能导致ModuleNotFoundError: no module named kestrel_main的几个常见原因:
模块搜索路径未包含脚本所在目录
Python导入模块时会遍历sys.path列表中的路径。当你用32位Python的绝对路径直接运行device_controller.py时,若脚本所在的device_controller目录未被加入sys.path,Python就无法找到同目录下的kestrel_main.py。这种情况可能是脚本内部有修改sys.path的代码,或者运行时的特殊机制导致默认路径被覆盖。当前工作目录与脚本所在目录不一致
若你在device_controller文件夹的上级目录执行运行命令(比如C:\Python32\python.exe C:\xxx\device_controller\device_controller.py),虽正常情况下Python会自动把脚本所在目录加入搜索路径,但如果存在环境变量配置异常或脚本内路径修改,可能导致Python误在当前工作目录(上级目录)寻找模块,自然找不到kestrel_main。文件名与导入名的大小写不匹配
Windows系统文件名不区分大小写,但Python的模块导入逻辑在某些场景下会严格区分大小写。如果实际文件名是Kestrel_Main.py这类大小写不同的名称,而你导入时写的是kestrel_main,就可能触发找不到模块的错误。Python模块缓存干扰
若之前有过导入失败的记录,Python生成的__pycache__缓存文件夹可能保留了错误的模块信息。删除device_controller目录下的__pycache__文件夹后重新运行,可能解决问题。
你可以在device_controller.py的开头添加以下代码,验证模块搜索路径是否包含目标目录:
import sys print("当前模块搜索路径:", sys.path)
如果输出里没有device_controller目录的绝对路径,就可以确定是路径配置问题。
内容的提问来源于stack exchange,提问作者youcantgetridofmestackoverflow

