pyinstaller打包的一个小插曲
2023-1-2 21:42:26 Author: MicroPest(查看原文) 阅读量:17 收藏

    这篇文章发表于《取证实录》(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,如下图

经过数十秒钟的耐心等待,完成exe打包,如下图

运行后出现了报错,报错信息显示:“No module named pandas._libs.tslibs.base”,如下图

初步怀疑:用pyinstaller打包时某些库没有打包进去。

排查下原因?

三、排查过程

1、这里用到-D参数,主要是查看有没有生成报错的库成员文件存在?查看生成的目录文件,如下图

找到报错的目录,

在目录_libs\tslibs中没有base成员文件。

2、接着用参数-p指向python安装目录中的site-packages看看是否存在,如下图

还是同样的报错,应该是目录库中也没有这个成员,如下图

四、源码中加入base成员

在源码中加入import pandas._libs.tslibs.base语句

 

再生成下看看,现在有了base成员文件了,如下图

 运行下生成的exe文件,如下图

正常了,可以视为打包成功。

结束语:通过一次排查过程,我们了解了打包过程以及出现问题后的排查方法,不难,只是个小技巧,记录下来,有时间回味下,也算是一次不错的心灵之旅。

五、补充

当时文章仅到以上就圆满地结束了,但心中对这样的过程还是不以为意,认为还是麻烦了,近日发现了一款Py自动打包软件,非常地不错,推荐给大家:https://www.52pojie.cn/thread-1732055-1-1.html


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NDcxMDQzNA==&mid=2247487519&idx=1&sn=699ab65e2aa95997200a13b6f141d9f6&chksm=a682c6d291f54fc462800c9d3fa940a95a998fb5d8402720bf473ab4c9dc90e597e42b1da43e#rd
如有侵权请联系:admin#unsafe.sh