PyCharm可运行但终端执行Python脚本遇ModuleNotFoundError求助
终端运行Python项目出现ModuleNotFoundError的解决方向
问题背景
项目在PyCharm中可正常运行,但在Linux终端执行时出现模块找不到的错误,项目结构如下:
BackTesting - 项目根目录 BackTestPkg - 自定义包 __init__.py Parameters.py ... MAX1 - 主开发目录 MAX1_Controller.py MAX1_Main.py ... TradingPkg - 自定义包 __init__.py PlatformLib.py ...
MAX1_Controller.py调用MAX1_Main.py,两者均会调用BackTestPkg和TradingPkg中的模块,模块间也存在互相调用。
执行的终端命令:
/data/stuart/Projects/Python/Env/bin/python /data/stuart/Projects/Python/BackTesting/MAX1/MAX1_Controller.py 'EpicConfigs.csv' 'MAX1.param'
报错信息:
Traceback (most recent call last): File "/data/stuart/Projects/Python/BackTesting/MAX1/MAX1_Controller.py", line 10, in <module> import MAX1_Main as main File "/data/stuart/Projects/Python/BackTesting/MAX1/MAX1_Main.py", line 8, in <module> import TradingPkg.PlatformLib as pl ModuleNotFoundError: No module named 'TradingPkg'
简单解决方向
方法1:通过环境变量指定项目根目录
在执行Python命令前,把项目根目录添加到Python的模块搜索路径中:export PYTHONPATH="/data/stuart/Projects/Python/BackTesting:$PYTHONPATH" /data/stuart/Projects/Python/Env/bin/python /data/stuart/Projects/Python/BackTesting/MAX1/MAX1_Controller.py 'EpicConfigs.csv' 'MAX1.param'或者一次性执行:
PYTHONPATH="/data/stuart/Projects/Python/BackTesting" /data/stuart/Projects/Python/Env/bin/python /data/stuart/Projects/Python/BackTesting/MAX1/MAX1_Controller.py 'EpicConfigs.csv' 'MAX1.param'方法2:切换到项目根目录后运行
先进入项目根目录,再以模块方式运行主文件:cd /data/stuart/Projects/Python/BackTesting /data/stuart/Projects/Python/Env/bin/python -m MAX1.MAX1_Controller 'EpicConfigs.csv' 'MAX1.param'这种方式会自动把当前目录(项目根)加入模块搜索路径,和PyCharm的运行逻辑一致。
方法3:在代码中临时添加路径
在MAX1_Controller.py的开头添加以下代码,手动把项目根目录加入搜索路径:import sys import os # 获取项目根目录的绝对路径 project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) if project_root not in sys.path: sys.path.append(project_root)这样不管在哪里执行脚本,都能找到自定义包。
内容的提问来源于stack exchange,提问作者StuartM
相关产品推荐
相关产品推荐

