文档章节

Pyinstaller (python打包为exe文件)

o
 osc_w9s1w4o0
发布于 2019/04/04 12:00
字数 1344
阅读 50
收藏 0

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

需求分析:

  • python脚本如果在没有安装python的机器上不能运行,所以将脚本打包成exe文件,降低脚本对环境的依赖性,同时运行更加迅速。
  • 当然打包的脚本似乎不是在所有的win平台下都能使用,win7有一部分不能使用,我在win10能够很好的运行。

准备:

安装:

需要安装pyinstaller和pywin32
使用以下命令将会自动安装两个包,在cmd用pip命令

  • 方法一:
pip install -i https://pypi.douban.com/simple/pyinstaller(豆瓣源)
  • 方法二:
pip install pyinstaller(会自动下载future, pywin32, pyinstaller)

运行方式:

1、cmd进入到安装pyinstaller的python环境下的/python/scripts目录 找到pyinstaller.exe。
2、执行命令:

pyinstaller.exe -F path:demo.py

案例:

将D:\pythonProject\python3.5\september19\calculator.py文件打为exe可执行文件

# 1.cmd进入到安装了pyinstaller的目录下
D:\pyutil>F:  # 切换盘符
F:\>cd pyenv/pyutil/scripts  # 切换目录
# 执行命令 -F 生成one-file的程序
F:\pyenv\pyutil\Scripts>pyinstaller.exe -F D:\pythonProjects\Python3.5\september19\calculator.py
# 执行成功后会当当前目录下生成一个dist目录并在dist目录上生成一个exe文件
11445 INFO: Appending archive to EXE F:\pyenv\pyutil\Scripts\dist\calculator.exe

各参数含义

通用参数
参数名 描述 说明
-h 显示帮助
-v 显示版本号
--distpath 生成文件放在哪里 默认:当前目录的dist文件夹内
与生成结果有关参数
参数名 描述 说明
-D 生成one-folder的程序(默认) 生成结果是一个目录,各种第三方依赖、资源和exe同时存储在该目录下
-F 生成one-file的程序 生成结果是一个exe文件,所有的第三方依赖、资源和代码均被打包进该exe内
-n 生成.exe文件和.spec的文件名 默认:用户脚本的名称,即main.py和main.spec
Windows和Mac特有的参数
参数名 描述 说明
-c 显示命令行窗口 与-w相反,默认含有此参数
-w 不显示命令行窗口 编写GUI程序时使用此参数有用。
-i 为main.exe指定图标 pyinstaller -i beauty.ico main.py

详情请参考:PyInstaller各参数含义

后记

  • 程序自定义图标:
pyinstaller -F -i ico_path py_path

首先需要下载一张正常的ico,不能直接修改后缀的。
下载图片:https://www.easyicon.net
图片改ico:http://www.bitbug.net
输入命令

pyinstaller -F -i demo.ico main.py  # 命令格式一定是先图标路径,再程序路径。
  • 报错提示:
    路径最好为英文,没有中文字符;脚本名称里没有特殊字符如.
    使用utf-8编码
    图标文件必须是正常格式,不能直接更改后缀。
    tuble index out of range --> pyinstaller 版本未支持的python版本
  • 窗口程序
    使用 pyinstaller -F -w -i ico_path py_path ,这样脚本不会弹出命令窗,前提是用了GUI库.

几个非常重要的问题

  • 命令使用pyinstaller和pyinstaller.exe结果都是一样的
  • -w是不显示命令窗口, -i 图标文件的路径 这是改变图标的,但是我发现只能改变任务栏里的和命令窗口的图标,并不能改变exe文件的图标。另外这些参数要加载pyinstaller和路径中间。
  • 有一些代码需要调用一些图片和资源文件的,这是不会自动导入的,需要你自己手动复制进去才行。不然exe文件运行时命令窗口会报错找不到这个文件。
  • 也是最坑的一点。就是当你使用错误的参数去打包或者打包到一半中断,等等此类运行到一半没了的情况。会导致你原来的py文件变成一个0KB的空文件。里面的代码会全部消失!!!所以以后需要有个良好的习惯,就是复制一份代码出来,用这个副本进行打包。并且参数出错,或者打错了导致失败时,检查下副本文件的py文件是否还存在再继续重新打包,不然打出来的就是空的文件,自然一直闪退,因为压根没内容。
  • 写代码的时候应当有个良好的习惯,用什么函数导什么函数,不要上来import整个库,最后你会发现你一个100KB的代码打包出来有500MB,全是库,简直无语
  • pygame代码调试的时候要用quit()不然程序结束时会崩溃。但是直接运行py文件就不需要这个函数。这个我们之前的文章也提到过了。但是这里当我使用-w做成无窗口的程序后,一结束发现报错,暂停后发现报的是找不到quit()函数。可见这个函数其实是一个很让人无语的函数。一方面pygame官方网上说结束程序的时候需要加入这个函数。另一方面其实在正在运行时都不需要甚至会报错。虽然也不影响运行,但是弹个窗口出来说 什么不fail to execute总是让别人觉得你是个lowb。所以,调试的时候加一下,到时候execute的时候去掉。
上一篇: 网商问题整理
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Python脚本导出为exe程序

环境:Pycharm2019.1 + Win10 + Python3.7.3 一.pyinstaller简介 Python是一个脚本语言,被解释器解释执行。它的发布方式: .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要...

osc_chydd7b8
2019/04/14
27
0
如何用Pyinstaller打包显示版本号的exe程序

如何用Pyinstaller打包显示版本号的exe程序 参考链接: https://zhuanlan.zhihu.com/p/20731500 https://blog.csdn.net/hurray123/article/details/48521845 关于pyinstaller的用法可以在命令......

osc_joey8bu9
01/08
19
0
Python不同版本打包程序为.exe文件

安装pyinstaller 测试用的python环境是3.6.2版本 下载地址 https://github.com/pyinstaller/pyinstaller/ 1.打开cmd,切到pyinstaller解压包目录,我直接放在c盘目录下了,所以我的操作是 2....

osc_ma60u6gg
2018/02/28
3
0
pyinstaller将python编写的打卡程序打包成exe

编写了一个简易的定时提醒下班打卡程序,python代码如下: #coding:utf-8import timeimport datetimefrom tkMessageBox import *from Tkinter import *def doSth(): def main(h=18, m=15): ma......

osc_6h5gkdny
2018/09/06
2
0
PyInstaller打包python脚本的一些心得

PyInstaller打包python脚本的一些心得 因为在公司经常要帮同事做一个从excel表格中提取出需要的内容的重复工作,比较繁琐还容易出错;于是就想着要写个程序,但是同事又不可能在电脑上也装上...

osc_8vblxxdl
2019/03/15
20
0

没有更多内容

加载失败,请刷新页面

加载更多

Kubernetes发布SpringBoot项目过程总结

SpringBoot 项目创建完成后,通常会打成 jar 包运行,如果不使用 Kubernetes 可以直接通过 java -jar 或者脚本启动,如果需要发布到 Kubernetes 环境,那么需要编写 Dockerfile、构建镜像、推...

strict_nerd
05/23
0
0
👉 最新推出【Jenkins扩展篇-API实践|监控】教程🎉🎉🎉 助力全方位Jenkins管理!课程详情可添加小助手微信: proc_code。

本文分享自微信公众号 - DevOps云学堂(idevopsvip)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

泽阳DevOps
02/18
0
0
没错,用三方 Github 做授权登录就是这么简单!(OAuth2.0实战)

本文收录在个人博客:www.chengxy-nds.top,技术资源共享。 上一篇《OAuth2.0 的四种授权方式》文末说过,后续要来一波OAuth2.0实战,耽误了几天今儿终于补上了。 最近在做自己的开源项目(f...

程序员内点事
3分钟前
0
0
Docker可视化工具Portainer

前言 对于新手来说,还是要熟悉并掌握Docker命令,因为它的命令还是非常清晰简单的。随着逐渐熟悉命令后,为了提高工作效率我们可以考虑借助一些工具协助。目前业界对于Docker可视化工具比较...

ville
7分钟前
0
0
从 Git 仓库的 Commit 历史中移除敏感文件

在很多情况,我们由于疏忽会将一些敏感信息误传到 Git 仓库上面去。 尽管我们可以使用git rm将包含敏感信息文件删除掉,然后重新提交上传,文件就不会在仓库文件列表显示。 但是这并不能完全...

A_laoshiren
12分钟前
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部