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

如何用PyInstaller将调用本地bash脚本的Python脚本打包为独立可执行文件

问题

需要将调用本地bash脚本的Python脚本通过PyInstaller打包为单可执行文件,实现不依赖外部脚本的独立运行。

项目结构:

Project/
|-- bash_script/
|   |-- script.sh
|-- main.py

main.py中调用脚本的代码:

output = subprocess.check_output('./bash_script/script.sh', shell=True).decode()

使用以下命令打包后,在dist目录运行可执行文件时出现错误:

pyinstaller --add-data "./bash_script/script.sh:." --onefile main.py

错误信息:

/bin/sh: 1: ./bash_script/script.sh: not found
解决方法

问题根源在于PyInstaller的--onefile模式会把所有打包资源解压到系统临时目录,而非当前运行目录,原代码的相对路径无法定位到脚本。按以下步骤修改即可解决:

1. 调整打包命令

保持bash脚本的原目录结构打包,确保解压后路径与开发环境一致:

pyinstaller --add-data "./bash_script/script.sh:bash_script" --onefile main.py

2. 修改main.py代码

更新脚本路径的获取逻辑,适配打包后的运行环境,同时给脚本添加执行权限:

import subprocess
import os
import sys

def get_script_path():
    # 判断是否处于PyInstaller打包后的运行环境
    if hasattr(sys, '_MEIPASS'):
        # 打包后临时解压目录下的脚本路径
        return os.path.join(sys._MEIPASS, 'bash_script', 'script.sh')
    # 开发环境下的原路径
    return './bash_script/script.sh'

script_path = get_script_path()
# 给脚本添加可执行权限
os.chmod(script_path, 0o755)
# 调用脚本并输出结果
output = subprocess.check_output(script_path, shell=True).decode()
print(output)

修改完成后,重新打包生成的单可执行文件即可在任意路径下独立运行,无需依赖外部bash脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:15:34