python解释器runtime嵌入

python解释器runtime嵌入

背景介绍

最近遇到个项目Windrecorder,感觉挺有趣想试试,但是该项目没有打包好的软件,只能使用源码运行,最主要的是项目不支持python3.12、推荐3.11,恰好我的系统环境是python3.12,平时也经常使用,不想为了这个项目将系统环境改为3.11。

项目提供Windows批处理文件(.bat)来安装和启动项目,其中会使用到python。一个简单的方法是正常安装python3.11,然后在批处理文件中修改PATH将3.11的路径添加进去set PATH=...\python-3.11.9\bin;%PATH%。尚未试验,不确定是否会出现其他环境问题。

因为要专门为它额外安装一个python解释器,很麻烦,让我想到B站看到哦有些up打包的一些AI应用,里面都内嵌了runtime即python解释器,完全自己额外配置,也不会影响本地环境。

嵌入方法

查阅资料得知python除了发布一般的可安装的二进制包外,还会发布Windows平台的可嵌入二进制包,类似软件的便携版,比如python-3.11.9-embed-amd64。将该压缩包解压放入项目文件夹,即可直接根据相对路径使用该解释器。

在批处理文件中,将嵌入式python添加到PATH,后续使用python就是用的项目里的解释器。

REM 设置Python解释器路径
set PATH=%~dp0runtime\python-3.11.9-embed-amd64;%PATH%

%~dp0 表示该批处理文件所在的文件夹(绝对路径)

对于用到tkinter的项目,需要额外引入相关库文件(嵌入式python不打包tkinter)。

从完整版 Python 安装中复制所需文件:

tcl/ 目录(位于 Python 根目录)
Lib/tkinter/ 目录
DLLs/_tkinter.pyd 文件
DLLs/tcl86t.dll 和 DLLs/tk86t.dll(版本号根据 Python 版本变化)

实际上,对于一个干净的完整版python,直接简单粗暴的复制DLLS,Lib,tcl即可。

然后是最关键的一步:编辑python311._pth,将文件中的import site取消注释,以保证sys.path能支持第三方库。

若是有其他依赖如ffmpeg也可一起放入rumtime文件夹,在批处理文件中加入PATH。

项目的runtime目录结构如下:

Windrecorder/
├── .venv/              <-- Poetry创建的独立虚拟环境
│   ├── Scripts/
│   ├── Lib/
│   └── pyvenv.cfg
├── runtime/            <-- runtime目录
│   ├── python-3.11.9-embed-amd64/
│   └── ffmpeg/
├── pyproject.toml       <-- Poetry依赖配置文件
├── poetry.lock
├── xxxx.py              <-- 项目文件
├── install_update.bat   <-- 安装脚本
└── start_app.bat        <-- 启动脚本

conda虚拟环境

也可使用conda创建python3.11的虚拟环境以供项目使用。

conda create -n recorder python=3.11

在批处理文件中关键要使用call 命令来激活虚拟环境,避免重启进程导致后面的命令无法正常运行

REM 激活conda虚拟环境
set "CONDA_ENV_NAME=recorder"
call conda activate %CONDA_ENV_NAME%
conda install -c conda-forge ffmpeg -y

...

REM 配置Poetry使用当前Python版本
poetry config virtualenvs.create true
poetry config virtualenvs.in-project true
REM poetry config virtualenvs.prefer-active-python true deepseek给的,但该命令不存在

注意ffmpeg必须在虚拟环境中安装,本地的ffmpeg是识别不到的

关键是call conda activate %CONDA_ENV_NAME%poetry config virtualenvs.in-project true,其他地方正常使用即可。

posted @ 2025-07-02 02:44  faf4r  阅读(65)  评论(0)    收藏  举报