您现在的位置是:亿华云 > 应用开发
Python 打包 Exe 程序避坑指南
亿华云2025-10-09 12:59:00【应用开发】5人已围观
简介本文转载自微信公众号「Python中文社区」,作者杨炳。转载本文请联系Python中文社区公众号。写完一个python程序之后,如何才能快速地将代码分享给别人,尤其对于初学者来说,能把自己的代码包装成
本文转载自微信公众号「Python中文社区」,打包作者杨炳。序避转载本文请联系Python中文社区公众号。打包
写完一个python程序之后,序避如何才能快速地将代码分享给别人,打包尤其对于初学者来说,序避能把自己的打包代码包装成一个exe程序并传递到别人电脑上运行,那是序避一件非常有成就感的事。好在python自带简易打包程序,打包让很多人能过一把当程序员的序避瘾。目前流行的打包打包库就有py2exe、pyinstaller和cx_Freeze。序避
但python的打包运行环境复杂,编写的序避程序往往是借助了很多附加的功能库来实现,对简单的打包打包会造成一定困难。本人也是在经历了多次的打包失败和成功的经历之后,觉得pyinstaller的成功率最高,所以有必要针对pyinstaller写一篇避坑指南。
一、安装
使用python的b2b信息网pip安装,在cmd窗口,使用pip install pyinstaller,即安装完成。然后配置好环境变量。
二、使用
例如在程序6.py所在文件夹打开cmd窗口。一般输入pyintaller -F **.py(命令符的具体含义在下文中解释),回车即开始打包。顺利的话,会出现打包成功的反馈,如下图,这时,就说明文件已经打包完成了。dist文件夹里面就放着打包完的exe程序,使用时剪切出来就行了。如果运气好或者本身程序比较简单,那这个exe就能在任何电脑运行了。
但往往没这么容易,pyinstaller在使用中有很多坑,打包的开始,也是修补的开始。
三、遇坑填坑
1.文件路径中不能出现中文
否则会在打包过程中直接出现如下报错。这时只要把所在文件夹和程序名字改成英文或者数字重新打包即可。可以打包完再将exe的服务器租用名字改回来。
2.缺少导入hook文件
有时即使打包成功了,在运行exe时候,还是会有报错并闪退。
如果报错为:FileNotFoundError: [Errno 2] No such file or directory:……
那是缺少hook文件,要在pyinstaller的安装路径里的hook增加一个自定义的hook。hook文件的命名规范为: hook-【库名】.py。例如以我在打包程序中用了结巴分词这个功能库为例,那我要建立一个hook-jieba.py,并写入:
from PyInstaller.utils.hooks import collect_data_files datas = collect_data_files("jieba")然后放到~\Lib\site-packages\PyInstaller\hooks中去,再次运行pyinstaller打包既可解决该问题。
3.缺少导入功能库模块
如果报错为 no moduler named “pandas._libs.skiplist”,那就要手动import库,解决方法打开生成的spec文件,找到 hiddenimports=[],加上要添加的库,将其改动如下,hiddenimports=["pandas._libs.skiplist"],然后删除dist里面的exe文件,重新用spec文件打包,pyinstaller **.spec。即可解决该问题。
四、花式打包
涉及到打包的几个重要参数如下。b2b供应网
-F,将所有内容打包到一个exe中,方便发送,一般都使用这个参数。 -c,此为windows系统的默认选项,使用这个参数,运行时会有一个黑窗控制台。 -w,使用这个参数,运行时不会出现黑窗控制台。 -i 使用这个参数用于生成自定义图标的exe,在这后面要加上ico图片的地址。例如,pyinstaller -i D:\icons\demo.ico **.py五、结语
将程序打包成exe发送出去或者供用户下载,是一个比较传统的传播方式,并且比较笨重,其实用简单的H5或者小程序就能实现一样的效果,对用户而言也更方便,也是朝着轻应用的方向发展。此外,对于专业用户还能通过github和api等方式传播。随着网络观念的深入人心和5G时代到来,相信有更好的方式能更安全、快捷、私密地将工具的功能传递给所需要的用户。
作者:杨炳,心理学者在银行写代码。
很赞哦!(728)
相关文章
- 前面这两个步骤都是在本机完成的。到这里还没有涉及真正的域名解析服务器,如果在本机中仍然无法完成域名的解析,就会真正请求域名服务器来解析这个域名了。
- 巧用Java8中的Stream,让集合操作6到飞起!
- Spring boot集成Kafka之spring-kafka深入探秘
- 现代编程语言哪家强?2020年,你或许应该了解这7门编程语言
- 5. 四种状态过后,域名管理机构释放域名给公众注册。
- 谷歌警告美国最高法院:甲骨文有可能成为垄断势力
- 在任何IDE中提高编码速度的5大技巧
- 如何构建支持百万并发量的企业级聊天架构
- (4) 使用何种形式的域名后缀对网页搜索影响不大,但域名后缀也需要考虑方便用户记忆
- 60个Chrome神器收集:快速成为B站老司机,一键分析网站技术栈