You need to enable JavaScript to run this app. WSL环境下Python3 subprocess调用Python2.7依赖二进制报错求解
优惠活动
大模型
产品
解决方案
定价
更多

WSL环境下Python3 subprocess调用Python2.7依赖二进制报错求解

场景说明
  • 运行环境:Win10 + WSL Ubuntu,主流程为Python3脚本,需调用依赖Python2.7库的老旧二进制程序martinize,因迁移成本过高未做Python3适配。全程无需单独调用Python2解释器执行代码,仅需通过激活虚拟环境完成二进制程序的依赖加载。
  • 手动验证的可运行步骤:
source ../martini_3.0.b.3.2/PythonCrisis/bin/activate
../martini_3.0.b.3.2/martinize -h
deactivate
  • 异常表现:将上述步骤写入shell脚本后,手动在Ubuntu终端执行无问题,但Python3脚本通过subprocess调用该shell脚本时,出现报错:
stdout
stderr /home/ubuntu/DE_NOVO_PROTEINS/SCRIPTS/martini_shell.sh: 3: source: not found
Traceback (most recent call last):
  File "/home/ubuntu/miniconda3/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/home/ubuntu/miniconda3/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "../martini_3.0.b.3.2/martinize/__main__.py", line 3, in <module>
  File "<frozen zipimport>", line 259, in load_module
  File "../martini_3.0.b.3.2/martinize/martinize/__init__.py", line 37, in <module>
ModuleNotFoundError: No module named 'core'
DeprecationWarning: 'source deactivate' is deprecated. Use 'conda deactivate'.
根因
  • 核心报错为source: not found:这是因为shell脚本的首行shebang声明实际为#!/bin/sh,而非预期的#!/bin/bash。
  • Ubuntu系统默认将/bin/sh指向dash shell,dash不支持bash内置的source命令,导致虚拟环境激活步骤直接失败,后续系统无法加载Python2虚拟环境内的依赖库,最终出现ModuleNotFoundError: No module named 'core'的连锁错误。
  • 手动在终端执行无问题的原因:交互式终端默认使用bash解释器,执行脚本时未触发shebang指定的dash解释器逻辑,因此可以正常识别source命令。
解决方案
  1. 修正shell脚本首行的shebang声明,将#!/bin/sh修改为#!/bin/bash,保存后重新调用即可。
  2. 若不想修改脚本文件,也可在Python3的subprocess调用逻辑中显式指定用bash解释器执行脚本,避免依赖shebang配置:
    import subprocess
    
    result = subprocess.run(
        ["/bin/bash", "/home/ubuntu/DE_NOVO_PROTEINS/SCRIPTS/martini_shell.sh"],
        capture_output=True,
        text=True
    )
    print("stdout", result.stdout)
    print("stderr", result.stderr)
    
  3. 可选优化:报错中的DeprecationWarning: 'source deactivate' is deprecated. Use 'conda deactivate'为conda虚拟环境的弃用提示,不影响核心运行,如需消除可将shell脚本内的deactivate替换为conda deactivate。

内容的提问来源于stack exchange,提问作者Anthony Nash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 15:36:04