这篇文章发表于《取证实录》(2022第三季),“翻看公众号时看到了apt-hunter,有它的描述‘ APT-Hunter 是一个针对 windows 事件日志的威胁搜索工具,可以检测隐藏在 windows 事件日志海洋中的 APT 动作,从而减少发现可疑活动的时间。此工具将充分利用收集的 windows 事件日志,并确保不遗漏被配置为检测的关键事件’。因为python需要环境支撑,不太方便,就想着打包封装成GUI,毕竟命令行用起来颇为痛苦。有了想法就动手开干,轻车熟路开始打包,没成想不太顺利,虽最终解决问题,但走了不少弯路,为避免同行重蹈覆辙,特分享出来以飨同仁。没什么技术含量,高手请直接略过。”
一、pyinstaller常用参数用法
# 常用打包参数
# -F -D互斥参数
-F 打包成一个exe文件,小项目可以采用,打开比较慢,多个.py打包时不能使用
-D 默认参数,打包结果放入到创建的文件夹中,可以看到里面有很多的依赖文件
# -w -c互斥参数
-w 使用项目的GUI界面,无cmd控制台
-c 默认参数,使用cmd控制台 如果打包文件执行报错,可尝试用-c 显示控制台
-n 执行项目的名称,默认.py的文件名
-i 将ico图标打包到exe文件中
--hidden-import 打包时导包信息
# 打包PyQt项目强烈建议 带上以下参数
--hidden-import PyQt5.sip
# 打包命令示例
# 在项目的根目录下执行打包命令
pyinstaller -w xxx.py --hidden-import PyQt5.sip
# 打包结果输出在项目根目录下的 dist文件夹中
# 不建议使用 -F打包成一个exe文件 所谓:打包一时爽,打开5秒钟
# 非-F命令下, 静态资源、建好的Sqlite数据库可以直接放入dist中 生成的文件夹中
二、py打包成exe
正常apt-hunter运行界面,如下图
只有一个py文件,打包时就使用参数-F,如:pyinstaller -F apt-hunter.py,如下图
运行后出现了报错,报错信息显示:“No module named ‘pandas._libs.tslibs.base’”,如下图
初步怀疑:用pyinstaller打包时某些库没有打包进去。
排查下原因?
三、排查过程
1、这里用到-D参数,主要是查看有没有生成报错的库成员文件存在?查看生成的目录文件,如下图
2、接着用参数-p指向python安装目录中的site-packages看看是否存在,如下图
四、源码中加入base成员
在源码中加入import pandas._libs.tslibs.base语句
再生成下看看,现在有了base成员文件了,如下图
正常了,可以视为打包成功。
结束语:通过一次排查过程,我们了解了打包过程以及出现问题后的排查方法,不难,只是个小技巧,记录下来,有时间回味下,也算是一次不错的心灵之旅。
五、补充
当时文章仅到以上就圆满地结束了,但心中对这样的过程还是不以为意,认为还是麻烦了,近日发现了一款Py自动打包软件,非常地不错,推荐给大家:https://www.52pojie.cn/thread-1732055-1-1.html