写在前面
最近写了一个python爬虫的脚本,想打包放上Github的Release,又不想用pyinstaller
偶然间发现了Pystand这个项目,打算尝试一下
项目地址
skywind3000/PyStand - Github
https://github.com/skywind3000/PyStand
开始打包
准备工作
1.首先准备好要打包的项目

这是我给Mfuns写的一个小工具,可以把网盘外链转成直链
2. 下载嵌入式Python包
Python 3.8.10
https://www.python.org/downloads/release/python-3810/

这里选择Python3.8.10 的32位版本嵌入包,因为Python3.8.10 是最后一个支持Win7的版本,使用32位可以使得包更紧凑
下载完以后解压缩,在前面准备好的项目文件夹下新建runtime目录,把解压得到的文件放到里面去
编译PyStand项目
PyStand的Release页只提供了GUI版本,但我这是一个命令行脚本,因此必须手动编译
同时我也想更换一下图标
以下内容参考了这位大佬的文章
下载cmake & 安装C++编译器
Cmake
Cmake downloads
https://cmake.org/download/
我选择直接下载便携版(zip后缀),然后把里面的bin目录添加到PATH
C++编译器
因为还不太懂C++,选择直接安装Visual Studio的C++环境 = ̄ω ̄=
编译!
首先Clone PyStand的仓库 git clone https://github.com/skywind3000/PyStand
换图标:只要替换根目录下的
appicon.ico文件即可
新建一个文件夹build文件夹存放编译过程中的文件 mkdir build && cd build
开始Configure
1 | cmake -S .. -B . -DPYSTAND_CONSOLE=ON -A Win32 |
编译
1 | cmake --build . --config Release |
然后应该能在Release文件夹下找到PyStand.exe文件,把它复制到最开始准备好的项目文件夹中
准备第三方库
准备第三方库有两种方法:
- 第一种是利用另一个同版本纯净Python的虚拟环境
- 第二种是直接在Python embeddable版本中安装pip来安装,第二种方法可以看看大佬的文章
我用的是第一种方法
先在沙盒中安装与嵌入版同版本的Python

创建虚拟环境
1 | C:\Users\WDAGUtilityAccount>python -m venv test |
在虚拟环境中安装依赖
首先在PyCharm到处requirements.txt文件
在工具中选择同步Python要求(sync python requirements)

导出requirements.txt文件

这会在项目根目录下生成requirements.txt文件,把它拷贝到刚才创建的虚拟环境test的目录所在的目录中
安装依赖
1 | # 先激活虚拟环境 |
安装完成后,把test\Lib\site-packages目录下没用的依赖删掉,然后把整个site-packages文件夹复制到最开始准备好项目文件夹下
小修小补
修改Python文件
为了确保各个python文件都能顺利加载,我修改了Mftools.py文件,加入了以下内容
1 | sys.path.append(r'.\src') |
同时在pan_transfer.py文件中也加入了,因为不加入就会报错
1 | sys.path.append(r'.\src') |
其实我还不太清楚为什么用了subprocess后原本的模块搜索目录列表会无法生效,之后可以试试import
修改文件名
这是项目作者的说明:
PyStand.exe的功能是:
- 自动加载 PyStand.exe 同级目录下面 runtime 子目录内的 Embedded Python
- 自动启动 PyStand.exe 同级目录下面的 PyStand.int 程序(Python 代码)
- 如果改名,会加载对应名称的 .int 文件,比如改为 MyDemo.exe 就会加载 MyDemo.int
- 会自动添加 PyStand.exe 同级目录下的 site-packages 目录,库可以放到里面
我这个项目是通过根目录的Mftools.py用subprocess运行子目录下的py文件实现的
因此我需要把根目录下的Mftools.py更名为Mftools.int,同时将PyStand.exe更名为Mftools.exe
最后的目录结构如下:

到这里就打包完成了,可以在命令行里打开Mftools.exe看看有没有有没问题