python 转 exe -- py2exe库实录
2016-04-13 18:24
615 查看
本文基于windows 7 + python 3.4
把python程序打包成exe,比较好用的库是py2exe
其操作步骤是:
--> 编写python程序
--> 再额外编写一个导入了py2exe的python脚本(不妨如:setup.py)存在同一目录下
--> 运行这个脚本,打包生成的exe文件保存在一个dist目录下
三个例子:
1.命令行
2.GUI (tkinter)
3.GUI (pyqt5)
现在有两个文件了
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/05/224d47ea1fb344f7a594cefaae772c15.png)
再进到目录运行上面这个setup.py脚本(亦可双击运行该脚本)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/05/ea7a3fe7581ab32986570a075eb62199.png)
然后发现多了一个dist目录
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/05/c1e6697ce1ab7c55216e4d1c649180b9.png)
可以发现dist目录下生成了一个hello.exe文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/05/e3d4066dd9c55a887fdb1513a9c02911.png)
再在命令行下执行hello.exe
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/05/dd2c18f6c674e6f813c8a7e406a887f8.png)
说明:
对tkinter打包, "bundle_files" 必须为 2,若是1会报错
进到目录运行上面这个setup.py脚本
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/06/56d901a8ffc73b4da8d53272b4ef7aca.png)
可以发现dist目录下生成了一个hello.exe文件和另外几个dll文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/06/9f4283f960858602c06af5e29946dfb5.png)
双击运行,出现窗口
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/06/541be3ff4986a67e9b571957d583cb56.png)
说明:不管是否用到,都要导入 from PyQt5 import QtWidgets, QtCore, QtGui
说明:对于pyqt5,下面两个是必须的:
进到目录运行上面这个setup.py脚本
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/06/d55d13d37984652ad4a59142d9f54165.png)
可以发现dist目录下生成了一个hello.exe文件和另外几个dll文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/06/82453837dce2143a2071cdc4ddc1511b.png)
双击运行,出现窗口
把python程序打包成exe,比较好用的库是py2exe
其操作步骤是:
--> 编写python程序
--> 再额外编写一个导入了py2exe的python脚本(不妨如:setup.py)存在同一目录下
--> 运行这个脚本,打包生成的exe文件保存在一个dist目录下
三个例子:
1.命令行
2.GUI (tkinter)
3.GUI (pyqt5)
1. 命令行
# hello.py print('你好,世界!')
# setup.py from distutils.core import setup import py2exe import sys #this allows to run it with a simple double click. sys.argv.append('py2exe') py2exe_options = { "compressed": 1, "optimize": 2, "ascii": 0, "bundle_files": 1, # 其中bundle_files有效值为: # 3 (默认)不打包。 # 2 打包,但不打包Python解释器。 # 1 打包,包括Python解释器。 setup( name = 'console demo', version = '1.0', console = ['hello.py',], # console 命令行执行程序 # windows 窗口执行程序 zipfile = None, options = {'py2exe': py2exe_options} )
现在有两个文件了
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/05/224d47ea1fb344f7a594cefaae772c15.png)
再进到目录运行上面这个setup.py脚本(亦可双击运行该脚本)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/05/ea7a3fe7581ab32986570a075eb62199.png)
然后发现多了一个dist目录
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/05/c1e6697ce1ab7c55216e4d1c649180b9.png)
可以发现dist目录下生成了一个hello.exe文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/05/e3d4066dd9c55a887fdb1513a9c02911.png)
再在命令行下执行hello.exe
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/05/dd2c18f6c674e6f813c8a7e406a887f8.png)
2. GUI (tkinter)
# hello.py import tkinter as tk root = tk.Tk() tk.Label(root, text="你好,世界!").pack(ipadx=100, ipady=50) root.mainloop()
# setup.py from distutils.core import setup import py2exe import sys #this allows to run it with a simple double click. sys.argv.append('py2exe') py2exe_options = { "compressed": 1, "optimize": 2, "ascii": 0, "bundle_files": 2, # 修改:2(打包,但不打包Python解释器) setup( name = 'tk demo', version = '1.0', windows = ['hello.py',], # 修改:windows zipfile = None, options = {'py2exe': py2exe_options} )
说明:
对tkinter打包, "bundle_files" 必须为 2,若是1会报错
进到目录运行上面这个setup.py脚本
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/06/56d901a8ffc73b4da8d53272b4ef7aca.png)
可以发现dist目录下生成了一个hello.exe文件和另外几个dll文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/06/9f4283f960858602c06af5e29946dfb5.png)
双击运行,出现窗口
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/06/541be3ff4986a67e9b571957d583cb56.png)
3. GUI (pyqt5)
# hello.py from PyQt5 import QtWidgets, QtCore, QtGui # 不管是否用到,只要是打包成exe,都要导入 import sys app = QtWidgets.QApplication(sys.argv) root = QtWidgets.QWidget() root.resize(200,100) QtWidgets.QLabel(root, text='你好,世界!') root.show() sys.exit(app.exec_())
说明:不管是否用到,都要导入 from PyQt5 import QtWidgets, QtCore, QtGui
# setup.py from distutils.core import setup import py2exe import sys #this allows to run it with a simple double click. sys.argv.append('py2exe') py2exe_options = { "includes": ["sip"], # PyQt5专有 #"dll_excludes": ["MSVCP90.dll",], # 鱼友论坛说这句必须有,我的没有也可以 "compressed": 1, "optimize": 2, "ascii": 0, "bundle_files": 1, #这里还是1 } setup( name = 'pyqt5 hello', version = '1.0', windows = ['hello.py',], # 窗口执行 # PyQt5专有 data_files=[("", [r"C:\Python34\Lib\site-packages\PyQt5\libEGL.dll"]), ("platforms", [r"C:\Python34\Lib\site-packages\PyQt5\plugins\platforms\qwindows.dll"])], zipfile = None, options = {'py2exe': py2exe_options} )
说明:对于pyqt5,下面两个是必须的:
①:"includes": ["sip"]
②:data_files=[("", [r"C:\Python34\Lib\site-packages\PyQt5\libEGL.dll"]), ("platforms", [r"C:\Python34\Lib\site-packages\PyQt5\plugins\platforms\qwindows.dll"])]
进到目录运行上面这个setup.py脚本
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/06/d55d13d37984652ad4a59142d9f54165.png)
可以发现dist目录下生成了一个hello.exe文件和另外几个dll文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/06/82453837dce2143a2071cdc4ddc1511b.png)
双击运行,出现窗口
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/06/06e352c47529e5561fa9424f515ed96b.png)
相关文章推荐
- python笔记 - 高级属性(20160413)
- python 列表、字典的方法
- 用python导入mysql
- 解决Python UnicodeDecodeError: ‘ascii’ codec can’t decode
- Python3.5入门学习记录-函数
- Python -- 字符串大小写转换
- python 基础学习(字典对象,set对象)
- 初学python(对比java语言不同) 第九篇
- python 基础学习(元组,if,for)
- hive+python数据分析入门
- [Python] Python基础字符串
- Python 3.5.1安装lxml
- python 小记2
- 各大机器学习包汇总(python版,持续更新)
- Python一日一练15----归并排序
- Python字典笔记
- python中的reduce函数
- Python 中用 Ctrl+C 终止多线程程序的问题解决
- Theano 学习笔记(一)
- Python-贴吧图片爬虫