运行backup.py遇ModuleNotFoundError,PyCharm运行正常求解决
问题原因
PyCharm会自动将项目根目录(router_move的父文件夹)添加到Python的sys.path中,所以能正确识别router_move模块;而命令行直接运行backup.py时,Python仅将脚本所在的router_move/目录加入sys.path,此时router_move作为模块不存在,导致导入失败。
解决方案
方法1:修改为相对导入(推荐,符合Python包规范)
将backup.py中的导入语句改为相对导入——因为backup.py与backup_mikrotik.py等文件属于同一包(router_move):
import socket from .backup_mikrotik import backup_mikrotik from .backup_eltex import backup_eltex from .backup_cisco import backup_cisco
修改后,需以模块方式运行(先进入router_move的父目录):
python -m router_move.backup
方法2:运行时手动添加项目根目录到Python路径
假设router_move的父目录路径为/Users/egorgulido/your_project_root(替换为你的实际路径),运行时指定PYTHONPATH:
macOS/Linux
PYTHONPATH=/Users/egorgulido/your_project_root python router_move/backup.py
Windows
set PYTHONPATH=C:\Users\egorgulido\your_project_root python router_move\backup.py
方法3:直接改为同级导入(不推荐,破坏包结构)
如果不想用相对导入,可直接导入同级模块:
import socket from backup_mikrotik import backup_mikrotik from backup_eltex import backup_eltex from backup_cisco import backup_cisco
这种方式在进入router_move目录后,直接运行python backup.py就能生效,但不符合Python包导入规范,不建议长期使用。
内容的提问来源于stack exchange,提问作者Egor-oop
相关产品推荐
相关产品推荐

