PyStand

义项:Python打包工具
PyStand

PyStand是一款面向Windows平台的Python独立部署工具,由开发者skywind3000(GitHub账号skywind3000)以C++编写并开源发布,用途是把Python程序与嵌入式Python运行时组合成一个无需目标机器预装Python即可运行的可执行程序[1][2]。它由一个体积很小的启动器exe和Python官方的嵌入式(Embedded)发行包配合工作,常见用法下普通Python程序的分发体积约5MB,PyQt5程序约14MB[1]。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

PyStand是一个面向Windows操作系统的Python独立部署环境,其英文全称为Python Standalone Deploy Environment[1]。它本身不是编译器,也不把Python代码编译成机器码,而是提供一个用C++编写的小型启动器程序PyStand.exe,由该程序负责调用同目录下的嵌入式Python解释器,再执行指定的Python脚本[1][2]。

项目源码以C++为主体,辅以CMake构建脚本和少量Python代码,主体语言占比中C++约为92%,CMake约为6.5%,Python约为1.5%[2]。

原理

该工具的运行依赖Python官方自Python 3.5起在Windows平台提供的嵌入式发行包(Embedded Python)。这一发行包是一个可独立复制、免安装的Python运行环境,PyStand自身并不重复提供解释器,而是把它当作运行时的宿主[1]。

启动时,PyStand.exe会在自身所在目录寻找名为runtime的子目录,加载其中的嵌入式Python,然后执行同级目录下的入口脚本PyStand.int;若可执行文件被改名,例如改为MyDemo.exe,则加载同名的MyDemo.int文件[1]。主程序所在目录下的site-packages目录会被自动加入模块搜索路径,第三方库直接放入该目录即可被导入[2]。

由于入口脚本与主程序同名的机制在改名后容易出错,后续版本增加了静态入口方案:主程序启动时若检测到同级目录存在_pystand_static.int,会优先加载该文件,从而允许可执行文件任意改名[1]。PyStand.exe默认是窗口程序,不带控制台窗口;若在cmd.exe中运行,则可以看到print语句输出的内容与错误信息[2]。

依赖安装的一般做法是,先建立一个与嵌入式Python版本一致的虚拟环境,在其中用pip安装所需模块,再把生成的site-packages内容复制到PyStand.exe同级的site-packages目录[1]。构建PyStand.exe需要CMake与MinGW工具链,也可直接下载发布页的预编译文件;发布32位程序时,配置CMake需指明Win32目标[2]。

发展历程

项目托管于GitHub,由skywind3000维护,项目主题标签涵盖python、deploy、pyqt5、pyside、pyside2、pyqt与pystand[2]。其发布记录累计有十余个版本,2025年3月31日发布的v1.1.5为当时的最新版本[2]。

随着使用增多,社区出现了若干衍生项目。其中之一保留了原项目的启动器思路,但把环境初始化工作从内嵌在C++代码中的字符串改为放在外部启动脚本中,并允许在源码开头设定启动脚本路径与解释器目录,便于在编辑器中使用同一环境开发调试;基于该方案开发的Umi-OCR是公开的使用案例。此外,亦有第三方在PyPI上发布名为pystand-cli的封装工具,借助PyStand与嵌入式Python把项目目录整理为可直接分发的结构[3]。

应用

PyStand适用于Windows下独立分发的命令行程序与图形界面程序,作者给出的典型场景包括普通Python程序与基于PyQt的程序,并称使用精简版PyQt5时打包体积约为14MB,普通程序约为5MB[1]。在作者的软件清单中,该工具的定位是为Windows下的命令行与GUI程序以及PyQt程序提供打包为独立可执行的方案[4]。

实际部署中,开发者常把业务代码放在同级目录的script文件夹或打包为script.egg压缩包,再在入口脚本中将其加入sys.path后导入,以减小分发体积;第三方工具则进一步把项目目录自动整理为包含runtime、site-packages、主程序与入口脚本的结构[1][3]。安全性方面,可将脚本预编译为pyd模块后再交由PyStand启动,以减少源码直接暴露[5]。

局限

PyStand的功能边界较为明确。它主要针对Windows平台,README中的机制说明均以Windows下嵌入式Python为前提[1]。它也不负责把代码编译成机器码,程序仍以Python源码或字节码形式随包分发,对源码保护有限,需借助其他编译工具另行处理[5]。

与自动分析依赖的打包器不同,PyStand不会自动收集项目所需的第三方库,需开发者自行在匹配版本的虚拟环境中安装并把site-packages内容复制过去,版本不一致或位数不匹配都会导致运行失败[1]。此外,入口脚本默认与可执行文件同名,直接改名会造成找不到入口,需改用静态入口文件规避;构建则需自行准备CMake与MinGW等工具链,或使用预编译文件[1]。

在界面库支持上,Qt6与PySide6只能用于64位Windows 10及以上系统,不支持32位系统,也不支持64位Windows 7;若需兼容Windows 7则须改用Qt5。需要说明的是,PyPI上另有一个同名名为pystand的项目,其用途是从python-build-standalone获取预编译Python版本,与本文所述的Windows启动器并非同一软件[6]。

参见

  • 嵌入式Python —— PyStand所依赖的运行时形态,决定其免安装运行的基础。

  • PyInstaller —— 另一类Python程序打包方案,常被拿来与PyStand比较取舍。

  • PyQt —— PyStand常见的使用场景之一,用于构建图形界面程序。

  • CMake —— 构建PyStand.exe所需的构建工具。

  • Umi-OCR —— 基于PyStand衍生方案分发的公开应用案例。

参考资料

  1. master [引用日期2026-10-29]
  2. github.com 上的网页 [引用日期2026-10-29]
  3. pystand-cli [引用日期2026-10-29]
  4. 开源项目 [Skywind Workshop] [引用日期2026-10-29]
  5. 使用PyStand嵌入式打包PyQT并用nuitka加密 [引用日期2026-10-29]
  6. pypi.org 上的网页 [引用日期2026-10-29]
词条评价
词条统计

浏览次数:0 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:29:56Z

历史版本

本条目引用的词条
嵌入式Python PyInstaller PyQt CMake Umi-OCR