使用Pyinstaller打包成可执行exe文件,并且在无Python环境下执行(适用于多文件夹的项目级工程)

网上查了很多关于如何打包exe文件的资料,但是大多数都只适用于单Python文件,本文旨在打包项目级工程

1、安装Pyinstall扩展包

pip install pyinstall

使用Pyinstaller打包成可执行exe文件,并且在无Python环境下执行(适用于多文件夹的项目级工程)
前提为python脚本库目录Script加入到环境变量中,安装成功后Script目录下会出现pyinstall.exe文件

2、cmd命令行进入项目入口文件所在位置

使用Pyinstaller打包成可执行exe文件,并且在无Python环境下执行(适用于多文件夹的项目级工程)

3、生成入口文件的exe可执行文件

我当前入口文件为AutoSystem.py

pyinstaller -D -noconsole AutoSystem.py

参数说明

-D
表示生成的exe文件会被包裹在一个包含其他依赖包的文件夹中,适用于工程目录较为复杂的情况,执行效率更高

-F (其他可选项)
表示将全部的依赖包打包成一个exe文件,适用于比较简单的工程

-noconsole
表示执行exe不会出现控制台,默认会出现控制台

上述操作执行完成后,当前目录下面会生成三个文件:

dist
该文件夹下面即为目标exe文件所在的目标目录,也就是我们最后需要的目录文件,目标目录默认和入口文件同名

build
编译过程中自动生成的目录,我最后都没有用到这个

AutoSystem.spec
编译配置文件,如果想通过配置该文件的参数的形式生成exe文件,请使用

pyi-makespec AutoSystem.py
pyinstaller AutoSystem.spec

的形式,本文暂不讨论

4、将项目所需的其他资源加到目标目录中

其实在做第四步之前,我一直有一个误区,就是将项目打包是把所有的文件都打包成exe文件,直到观察执行 pyinstaller 时突然想到一个问题

pyinstaller 这一工具生成exe时到底干了什么?
1、根据入口文件的各种引用,加载包括python在内的所有依赖包,使得
入口文件可以在无python的环境下执行
2、将入口文件中的python代码,编译成为可以直接运行的二进制脚本,使得
点击.exe文件 等价于 在命令行中输入:python 入口文件.py

所以,只需要把除了入口文件,其他项目运行所需的所有依赖文件,都放在目标目录中,也就是和exe文件平级的位置不就可以解决项目各种目录的引用问题吗

因为资源敏感问题,这里就不贴图了,所以最终的目标目录应该包括:

  1. 可执行文件:AutoSystem.exe

  2. 除了AutoSystem.py之外的全部项目所需文件

  3. pyinstaller生成的项目依赖文件,取决于你的项目负责度,有可能会很多

5、提取目标目录

上述操作执行完成后,会在dist目录下生成和入口文件同名的目标目录,废话不多说,直接剪切走,你可以把它发给你任何一个windows系统,且操作系统位数(64、32)和你相同的同事,并且可以不依赖任何环境就可以执行,当然他也可以把exe文件发送到桌面快捷方式来快速执行