记录踩到的 pyinstaller 打包 exe 的坑

2018-08-02 13:33:28 +08:00
 firejoke
需求:帮别人做一个统计 pdf 文档内词频的功能
环境:python3.6

>Package Version
-------------- ---------
altgraph==0.16.1
atomicwrites==1.1.5
attrs==18.1.0
future==0.16.0
jieba==0.39
macholib==1.10
more-itertools==4.2.0
pdfminer3k==1.3.1
pefile==2017.11.5
pip==18.0
pluggy==0.7.1
ply==3.11
py==1.5.4
PyInstaller==3.3.1
pytest==3.7.0
setuptools==39.1.0
six==1.11.0

参考文档:
https://www.jianshu.com/p/5a59b6985346
https://www.crifan.com/use_pyinstaller_to_package_python_to_single_executable_exe

坑:
上述链接文档里,都是把环境和脚本打包成了一个 exe 文档
在脚本目录用命令 pyinstaller -F -p venv_path (中间一定要有空格) you.py
打包成一个文档后,报错在系统目录找不到 jieba 的 dict.txt
因为 jieba 会去找它自带的 dict.txt 文档
当你打包成一个文档的时候,貌似 pyinstaller 不会把你的 txt 文档打包进来,所以 jieba 回去系统目录去找,就会找不到,然后报错
想到的第一个解决办法是改搜索路径,嫌麻烦,不改...
第二个办法,既然不会打包 txt 文档,那我干脆不打包依赖库,只打包脚本,让它自己去搜索依赖
pyinstaller -p venv_path (中间一定要有空格) you.py
因为我需要黑终端输入路径,所以没有用 -w 参数
在 dist 文件夹生成了一个以脚本名命名的文件夹,包含一堆配置文档和一个 脚本名.exe
运行报错找不到当前目录下的 jieba
遂把 venv/lib/python3.6/site-packages/ 下的所有文件拷过来
双击成功 666
7356 次点击
所在节点    Python
26 条回复
mathgl
2018-08-02 22:07:05 +08:00
@H0TSp1RnG 找一台 windows 的机器来做。
itskingname
2018-08-02 22:13:52 +08:00
@weyou 因为他们只会用百度搜索中文博客看。
firejoke
2018-08-03 09:42:02 +08:00
@itskingname 好好说话不会吗, 自卑感好点了吗
firejoke
2018-08-03 09:45:24 +08:00
@weyou 说的对,当时只想着可能是命令问题,一心去找别人的解决方法,没想到去看官方文档,
下次吸取教训, 我去试试能不能把 jieba 自带的 dict.txt 路径一起打进去
firejoke
2018-08-03 11:59:28 +08:00
最后,结合官方文档 https://pyinstaller.readthedocs.io/en/v3.3.1/spec-files.html
把 jieba 模块下的所有 txt 文档在 .spec 文件内加进去
形式:
datas = [ ('XXX.txt_path', 'jieba' ),('analyse/XXX.txt_path', 'jieba/analyse'),('finalseg/XXX.p_path','jieba/finalseg'),......]
(非.py 文档以路径 , 模块名), 或者(非.py , 模块名 /包名)

或者直接
datas = [ (‘ jieba','jieba' ) ]

这两个形式都可以
然后 pyinstaller name.spec 运行一下就 OK 了
VVTA
2019-04-16 17:52:19 +08:00
好久没来了.上来学习下哈.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/476247

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX