在前面的一章里,我们学习到了两种方法把python打包成EXE文件。但是这两种方式都是使用的Cpython作为解析器。导致其运行效率不是很高。而且这两种方法打包出来的软件还是挺大的。而pypy是无法用pyinstaller打包的。在这里我想介绍一下自己手动打包pypy的方法。在网上没有找到pypy打包的程序。因此在这里记录一下我的打包过程。里面有很多东西都是靠自己删除得来的打包得来的。因此比较麻烦。如果有更好的打包的方法,希望能够教我。谢谢大家。需要注意的是,pypy3的路径不能有中文,否则会报错的。同时需要注意的是,我的这些步骤中,难免有一些步骤是不完整的。因此报错的时候需要自己去解决。

配置pypy3环境

首先把下载好的文件解压缩:解压缩后的文件树如下,有些可以删掉的文件在后面备注了。

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2020/4/10     15:54                include                 可删
d-----         2020/4/10     15:54                lib-python 
d-----         2020/4/10     15:54                libs 可删
d-----         2020/4/10     15:54                lib_pypy
d-----         2020/4/10     15:54                site-packages           
d-----         2020/4/10     15:54                tcl        需要重命名位lib放入到lib_pypy文件夹下
-a----          2020/4/7      6:49       36598272 libpypy3-c.dll
-a----          2020/4/7      6:49          13352 LICENSE                 可删
-a----          2020/4/7      6:49         123904 pypy3.exe               
-a----          2020/4/7      6:49         123904 pypy3w.exe              无控制台窗口的exe
-a----          2020/4/7      6:49           1142 README.rst              可删

打开cmd,切换到解压后的目录中去。运行pypy3.exe。如果能直接进入到运行界面,则表示能够正常工作了。接下来就是把第三方库导入进去。

导入第三方库

第三方库的导入有很多种方法。

第一种是直接去anaconda的第三方库内把所需的库复制出来。具体需要什么库呢。直接运行pypy.exe。弹出缺少什么库就把这个库给添加上去。

第二种是使用anaconda的pip把第三方库安装到pypy上。这里要使用anaconda的shell,使用的指令为:

python -m pip install python-can --target site-packages

第三种方法是给pypy安装上pip,然后用pip来安装。由于这里还需要安装pip,导致后续软件打包文件变大。因此这里就不使用这种方法了。安装pip的指令为以下,然后会生成一个Scripts文件夹,直接调用这个文件夹下的pip就能下载第三方库了:

pypy3.exe -m ensurepip

将第三方库与自己的程序打包一起

在安装好第三方库之后,使用pypy运行一次程序,如果能够正常工作的话,就可以进入到下一步了。将第三方库与自己的程序打包到一块去。这里用的是python自带的zipapp这个库。具体的使用方法可以百度搜索zipapp的使用方法。

将自己的程序也复制到site-packages这个文件夹内。然后创建一个新的py文件。命名为__main__.py。输入以下

from blf import *

main()

然后使用zipapp,就能生成一个pyz文件。用pypy运行这个文件。其运行效果与之前的运行效果是一样的。

pypy3.exe -m zipapp site-packages

把标准库编译成pyc

使用python的compileall库进行打包。打包的指令为:

pypy3.exe -m compileall -b 目录

然后在cmd中用del指令删除所有的py文件。用文件搜索,把所有的__pycache__文件夹删除。就能得到一个干净的运行目录了。

del /F /Q /S /*.py

把软件打包成单文件格式

这里使用的打包成单文件的方法是使用7z。首先方法是将所有运行的文件打包成一个压缩文件7z。然后用7zSfxTool.exe这个软件将其打包成exe文件。参考链接

首先使用7z将软件所需运行的软件打包成7z。需要注意的是要把压缩算法设置位LZMA。否则后面会报错

arm python 打包 python 打包工具_exe

 接下来就是使用7zSfxTool.exe将这个压缩包编为exe文件。这些步骤在参考链接中已经有了。这里提一下运行软件的设置如下图。相当于打开软件会自动运行 pypy3.exe blf.pyz。

arm python 打包 python 打包工具_arm python 打包_02

小结

这种打包方式的坏处就是软件在运行的时候要解压很多的文件。导致启动的时候速度非常慢。要达到十秒左右。当然我们也可以删除标准库里面的一些用不上的标准库,以及一些用不上的文件。把软件的体积变小。但是一个个手工删除是太麻烦了。所有需要很大的耐心