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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:14:58