You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从其他目录运行Python文件提示找不到'__main__'模块如何解决?

问题解决办法

错误根源

你遇到的报错是路径依赖工作目录导致的,代码里所有相对路径、os.getcwd()的逻辑,都会跟随你执行命令的目录变化,从父目录运行、crontab运行时,工作目录和脚本所在目录不一致,就会找不到依赖模块、模型文件,进而触发can't find '__main__' module等报错。

修复步骤

1. 修改代码内路径逻辑,替换相对路径为基于脚本位置的绝对路径

在代码开头导入os后,先获取当前脚本的绝对目录:

# 获取当前脚本所在的绝对目录,不会跟随执行目录变化
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))

替换原有路径相关代码:

  • 原来的sys.path.append('..')替换为:
# 添加上级目录到导入路径,固定指向脚本所在目录的上级
sys.path.append(os.path.join(SCRIPT_DIR, '..'))
  • 原来的CWD_PATH = os.getcwd()替换为:
CWD_PATH = SCRIPT_DIR
  • 如果需要将生成的encoded_string.txt、opencv.png保存在脚本所在目录,修改对应文件路径:
# 写encoded_string.txt的部分
with open(os.path.join(SCRIPT_DIR, 'encoded_string.txt') ,'wb') as f:
# 写opencv.png的部分
cv2.imwrite(os.path.join(SCRIPT_DIR, 'opencv.png'),image)

2. 手动运行命令调整

如果要从父目录启动脚本,不要直接传相对路径,先切换到脚本所在目录再执行:

cd /完整路径到/subfile && python3 example.py

3. crontab开机自启配置调整

crontab的默认工作目录是用户家目录,且默认没有图形环境权限,修改@reboot规则如下:

@reboot export DISPLAY=:0 && cd /完整路径到/subfile && /usr/bin/python3 example.py >> /var/log/obj_detect.log 2>&1

说明:

  • 先执行cd切换到脚本所在目录,保证路径正确
  • 执行which python3可以查询你环境中python3的绝对路径,替换上面的/usr/bin/python3
  • 末尾加日志输出,后续报错可以查看/var/log/obj_detect.log排查
  • export DISPLAY=:0是给cv2的图形窗口授权,如果你不需要显示检测窗口,可以注释掉代码里的cv2.imshow相关逻辑,同时去掉这部分配置

内容的提问来源于stack exchange,提问作者Seungmin Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 00:54:03