pyinstaller打包python文件为可执行exe详解

pyinstaller打包python文件为可执行exe

1、安装pyinstaller

注:如果已经安装好请直接跳过该小结。单个文件打包在第三小节,有引用文件或第三方dll库的打包在第四小节。接下来开始介绍安装。
最常用的方法就是pip install pyinstaller

pip install pyinstaller

但是有时候会出现下载成功,但是安装失败的情况(本人有幸遇到过),让人很是头疼,后来多方查阅使用下面的方法解决了安装的问题

pip install wheel
pip install pyinstaller

2、pyinstaller参数详解

关于参数问题,这里只列出了比较重要的几个,其他的可以自行百度。

-F, –onefile 打包一个单个文件,如果你的代码都写在一个.py文件的话,可以用这个,如果是多个.py文件就别用
-D, –onedir 打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,我个人比较推荐这样,代码易于维护
-p, –path=DIR 设置导入路径(和使用PYTHONPATH效果相似).可以用路径分割符(Windows使用分号,Linux使用冒号)分割,指定多个目录.也可以使用多个-p参数来设置多个导入路径,让pyinstaller自己去找程序需要的资源
--add-binary 添加第三方dll库,第一个参数是库文件的绝对路径,第二个参数是打包之后存放路径。可以用路径分割符(Windows使用分号,Linux使用冒号)分割。

3、单个文件打包

在这里单个文件的打包就不在细说,执行下面命令即可

pyinstaller -F xxx.py

会在当前执行目录下生成一下几个文件,生成的exe文件就在dist文件夹中
在这里插入图片描述
在这里插入图片描述

4、有引用文件或第三方dll库的打包

接下来开始划重点了。
在实际开发过程中,不可避免的会使用到多文件的引用以及第三方库的使用,那么这个时候该怎么打包呢?

首先依赖文件的打包
可以使用上面说到的 -p 参数实现,比如下图,在当前的py文件中用到了dlt645和util两个文件夹中的.py文件,那么只需要将dlt645他们所在的文件目录打包时添加进去即可。
在这里插入图片描述

依赖的文件或文件夹都在相同的文件夹下(单个)
pyinstaller -F test_resptime_write.py -p D:\dlt645_testsunits_pkg\dependencies
依赖的文件或文件夹都在不同的文件夹下(多个)
 pyinstaller -F test_resptime_write.py -p D:\dlt645_testsunits_pkg\dependencies -p D:\dlt645_testsunits_pkg\infrastructure

这样之后就可以实现将依赖文件打包

接下来是dll库的打包问题,这一块就与依赖文件不同类,不可以使用 -p 添加路径的的方式来添加dll库的路径来实现(踩坑无数)。经过查阅,终于找到了正途, --add-binary(用法上面第二小节也简单介绍过)。命令也很简单。

pyinstaller -D test_comparam.py -p D:\dlt645_testsunits_pkg\dependencies -p D:\dlt645_testsunits_pkg\infrastructure --add-binary "D:\dlt645_testsunits_pkg\dependencies\dlt645\CET.IASP.DLT645.dll;.\dlt645"

细心地小伙伴会发现这里把 -F 换成了 -D,目的是为了让大家更了解打包之后的内部结构。执行之后会得到一个文件夹。
pyinstaller打包python文件为可执行exe详解_第1张图片
这里面最主要的就是test_comparam.exe和dlt645文件夹了,一个是可执行文件,另一个里面就存放着我们引用的第三方库,也就是我们在打包命令中添加的存放路径(.\dlt645)。至此打包就结束啦,接下来就可以尝试执行了。

在这里插入图片描述
输出的内容就是通过引用第三方库得到的结果啦。当然前提是代码中dll文件的引入以及使用没有问题

(注意引用dll库文件时要使用绝对路径,可以使用os模块将当前文件的目录和库文件名拼接后得到一个路径,并使用该路径进行引入)

你可能感兴趣的:(python,pyinstaller,dll,exe)