本文基于windows 7 + python 3.4
把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 importsetupimportpy2exeimportsys#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}
)
现在有两个文件了
再进到目录运行上面这个setup.py脚本(亦可双击运行该脚本)
然后发现多了一个dist目录
可以发现dist目录下生成了一个hello.exe文件
再在命令行下执行hello.exe
2. GUI (tkinter)
#hello.py
importtkinter as tk
root=tk.Tk()
tk.Label(root, text="你好,世界!").pack(ipadx=100, ipady=50)
root.mainloop()
#setup.py
from distutils.core importsetupimportpy2exeimportsys#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脚本
可以发现dist目录下生成了一个hello.exe文件和另外几个dll文件
双击运行,出现窗口
3. GUI (pyqt5)
#hello.py
from PyQt5 import QtWidgets, QtCore, QtGui #不管是否用到,只要是打包成exe,都要导入
importsys
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 importsetupimportpy2exeimportsys#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脚本
可以发现dist目录下生成了一个hello.exe文件和另外几个dll文件
双击运行,出现窗口