1.应用场景
1.1 故事背景
我自己用python写了一个小程序发给其他同事用,给他的就是一个.py文件,不过他觉得比较麻烦,还要安装环境,他问我有没有简单一点的方式,我给一个exe文件,他就不用安装环境就可以运行我的程序,我内心在想这么麻烦,还要我跟你打包成为exe,不过没办法,谁叫是好朋友了,我就答应他了。
1.2 寻找资料
在写c#的时候,面向nuget编程(谁叫四渣渣程序员了);在学习python之前就之前有很多组件(开心的飞起),开始在github和google上寻找资源,最终发现以下几个东西 相关来源
- PyInstaller:将 Python 程序转换成独立的执行文件(跨平台)。官网
- dh-virtualenv:构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。官网
- Nuitka:将脚本、模块、包编译成可执行文件或扩展模块。官网
- py2app:将 Python 脚本变为独立软件包(Mac OS X)。官网
- py2exe:将 Python 脚本变为独立软件包(Windows)。官网
- pynsist:一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python 本身。官网
1.3 技术方案
通过对比,最终选择了上面例子中的 pyinstaller
1.4 pyinstaller 使用教程整理
- 直接在命令行用pip安装 pyinstaller【第一次需要安装成功后,后面就不需要再安装了】
pip install pyinstaller
2. 在命令行中切换到要打包的程序所在目录,直接输入下面的指令即可
pyinstaller learn01.py -F
pyinstaller参数 | 含义 |
---|---|
-F | 指定打包后只生成一个exe格式的文件 |
-D | –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项) |
-c | –console, –nowindowed 使用控制台,无界面(默认) |
-w | –windowed, –noconsole 使用窗口,无控制台 |
-p | 添加搜索路径,让其找到对应的库。 |
-i | 改变生成程序的icon图标 |
-h | pyinstaller各个参数的讲解 |
1.5 关于 pyinstaller 使用总结
在用 pyinstaller 打包成exe后,点击运行,发现直接闪退,有点懵逼,猜想肯定是自己的使用方式不对,后来也去google上搜索了,发现也有人也在搜索 pyinstaller 打包exe后闪退的相关问题,按照教程尝试了好几篇,找了好几天一直没有理想的答案,发现还是闪退。既然没找到答案,那么我就去youtube上找个播放次数比较多的教程看看,看看别个怎么用法,最终大神的教程中找到了解决办法,在代码最后面加上相关代码就行,我整理了一下三种做法:
# 1.暂停的第一种方式
# time.sleep(10)
# 2.暂停的第二种方式
# input("Press <enter>")
# 3.暂停的第三种方式 (比较推荐这个)
# 提示使用之前,记得引入相关组件 import os
os.system("pause")
看到以上的做法,突然想起来了在c#中写控制台的场景,最后都会加一句一下代码(如果不加,那就直接退出控制台了,看不到运行后的控制台返回的参数:
Console.Read();