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

如何在批处理文件中通过虚拟环境执行PyInstaller打包Python程序

问题:批处理中在虚拟环境内执行PyInstaller失败

需求

  • 编写批处理文件,完成流程:创建Python虚拟环境 → 安装指定依赖 → 使用PyInstaller将Python脚本打包为可执行文件

目录结构

  • 父目录:fileName.py、icon.ico、compileEXE.bat
  • .venv子目录:包含upx文件夹(内有upx.exe)

现有批处理代码

copy fileName.py .venv
copy icon.ico .venv

cd .venv

@echo off
Set "out=."
(
    Echo;pytube==15.0.0
    Echo;moviepy==1.0.3
    Echo;keyboard==0.13.5
) > "%out%\requirements.txt"

echo;requirements.txt created

@echo on
python -m venv fileName

cmd /k "pip install -r requirements.txt"

fileName\Scripts\activate.bat

pyinstaller fileName.py -F --icon=icon.ico --upx-dir upx

尝试过的无效修改

  1. start /b "" "python.exe" "pyinstaller fileName.py -F --icon=icon.ico --upx-dir upx
  2. cmd /k "pyinstaller fileName.py -F --icon=icon.ico --upx-dir upx

预期结果 vs 实际结果

预期

  • .venv/dist文件夹生成fileName.exe
  • 创建包含依赖的fileName虚拟环境
  • 完成icon.ico和fileName.py的移动
  • 生成requirements.txt

实际

  • 虚拟环境创建成功
  • 文件移动完成
  • requirements.txt生成成功
  • PyInstaller未执行,无exe文件生成

手动在终端执行PyInstaller命令可正常工作

核心问题

如何在批处理文件的虚拟环境中正确执行PyInstaller命令?


解决方案

问题根源:批处理中单独调用activate.bat只会修改子shell的环境变量,不会影响当前批处理进程的上下文。以下两种方法可以解决:

方法1:直接调用虚拟环境内的可执行文件

跳过activate.bat,直接使用虚拟环境目录下的pip.exe和pyinstaller.exe路径执行命令,无需激活环境即可使用虚拟环境内的依赖:

@echo off
copy fileName.py .venv
copy icon.ico .venv

cd .venv

Set "out=."
(
    Echo;pytube==15.0.0
    Echo;moviepy==1.0.3
    Echo;keyboard==0.13.5
) > "%out%\requirements.txt"

echo requirements.txt created

python -m venv fileName

:: 直接用虚拟环境内的pip安装依赖
fileName\Scripts\pip.exe install -r requirements.txt

:: 直接用虚拟环境内的pyinstaller打包
fileName\Scripts\pyinstaller.exe fileName.py -F --icon=icon.ico --upx-dir upx

方法2:在同一子shell中执行激活+打包命令

如果一定要用activate.bat,需要把激活命令和PyInstaller命令放在同一个子shell中执行,确保环境变量生效:

@echo off
copy fileName.py .venv
copy icon.ico .venv

cd .venv

Set "out=."
(
    Echo;pytube==15.0.0
    Echo;moviepy==1.0.3
    Echo;keyboard==0.13.5
) > "%out%\requirements.txt"

echo requirements.txt created

python -m venv fileName

fileName\Scripts\pip.exe install -r requirements.txt
:: 激活环境后立即执行打包命令,用&&保证顺序执行
cmd /c "fileName\Scripts\activate.bat && pyinstaller fileName.py -F --icon=icon.ico --upx-dir upx"

额外优化提示

  1. 开头加@echo off可以减少冗余输出
  2. 打包完成后可添加命令清理临时文件(如rmdir /s /q build、del fileName.spec)
  3. 可增加错误判断,比如检查虚拟环境是否创建成功、依赖是否安装完成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:55:01