PyInstaller 可以将 Python 项目打包成一个可执行文件,或是一个文件夹,包含可执行文件以及依赖包。方便我们将 Python 项目交付给用户,方便用户使用的同时也可以一定程度的保护项目源代码。本文将介绍如何简单使用 PyInstaller 打包。
使用 安装即可:
让我们新建一个项目命名为 ,文件结构如下:
其中项目核心文件为 ,内容如下:
现在,进入到项目根目录 ,运行如下命令:
初次运行可能会出现下面的错误:
这是因为 PyInstaller 需要 python-dev 环境,如果是使用 可以用以下命令重新安装 Python:
或者,可以安装 python-devel 版本,比如在 CentOS 上可以通过下面的命令查看可用版本:
安装 即可。
成功运行后目录下会多出来一些文件,现在的结构如下:
其中 就是打包出来的可执行文件了,我们现在可以将 整个文件夹压缩并打包交付给用户。用户拿到后解压并运行 文件即可。以下是运行后的结果
也可以通过指定 参数将依赖包与项目文件打成一个文件:
此时可执行文件路径为:
相对与单个文件的形式,单个文件夹在启动时会更快,而且在后期更新时,在没有依赖更新的情况下,仅需要交给客户项目文件即可,可以一定程度减少文件传输。
一般来说,我们的项目很少会只有一个文件。现在,让我们为 创建一个新的文件 ,作为核心逻辑的存放位置。现在的目录结构如下:
文件内容为:
通常情况下,如果我们在 中有导入 的话,PyInstaller 会在打包时将 也一同编译进去,但若是涉及到动态导入的话,则 文件会缺失导致导入失败,比如现在将 逻辑更新如下:
再次打包并运行,会报错找不到模块 :
可以通过指定 参数告诉 PyInstaller 模块需要被一块打包,通过这样的方式再次打包后就可以正常运行了:
如果只有一个 是动态导入,通过传入 即可,如果项目中存在多个模块或依赖库存在动态导入,那么命令行的参数只会越来越长变得难以阅读,为此 PyInstaller 提供了 模式可以便于我们通过 Python 文件维护这些动态导入的模块。
下面效仿 为项目添加一个 模块,分别提供了对 MySQL 和 Oracle 数据库的支持,现在项目结构如下:
中增加对支持的数据库的加载并打印到屏幕:
现在在项目中新增一个文件夹用于管理 ,命名为 ,项目结构如下:
在 下新建一个名为 的文件,内容如下:
然后使用命令重新打包,指定 为 文件夹路径,同时将 改为 :
再次运行,可以看到不管是 还是 模块都有被正常加载:
如果我们想要提供的包只支持 ,那么可以在 中对 模块做更精细的控制。首先修改 为:
如果想对 下面的子模块提供更进一步的控制,可以在 下面新建一个 文件,并写上具体逻辑,PyInstaller 会在打包时自动找到该文件并应用,同理其他模块也是如此。
再次打包并运行,结果如下:
项目增加了一些模板文件需要提供给用户,放在 目录下:
那么如何将 下面的文件能被一起打包并被程序识别到呢,可以通过 参数将文件放入指定的相对路径,现在将打包命令更改为:
其中 前的 是我们打包时 所在的相对路径, 后的 是期望打包后文件所在的路径。后者的 代表了打包后项目运行时的根目录。
将 文件修改为如下以获取可用的模板文件:
重新打包并运行,可以看到模板文件已经被正常加载:
如何判断当前代码是在打包后的环境运行,还是非打包环境运行呢,可以通过如下方式:
PyInstaller 会在运行时将打包文件放在 所指向的路径下,对于以文件夹方式打包的项目,该路径实际上就是 ,而对于单个文件的方式,这个路径实际上指向的是某个临时文件夹路径(比如 Linux 下的 ),如果项目需要生成一些需要保留的文件,可以通过参数 重新指定该路径。
更多用法可参考官方文档:PyInstaller Manual — PyInstaller 6.3.0 documentation
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/14885.html