如何打包python应用(一)
2016-12-25 20:45
1136 查看
对于python编程之后,除了在Python IDE中运行之外,可以将python的程序打包为python应用,直接在PC环境上运行。对于python打包目前有很多第三方库文件直接使用。在这里主要介绍一下cx freeze和pyinstaller两种
step1: 安装,pip install cx_freeze
step2:在cmd中,切换到Python安装目录的Scripts目录,比如我的为c:\Python32\Scripts 运行cxfreeze-postinstall
python cxfreeze-postinstall
step3:检测是否安装成功,cxfreeze -h
2. cx-freeze打包:
打包命令:python setup.py build
其中打包的脚本命令如下:
3. 打包脚本说明:
build_exe_options 打包所需的第三方库
executables 可执行的文件
setup 可执行文件相关信息
4. 打包过程:
python源文件,路径C:\Python33\Lib\site-packages\cx_Freeze\samples\eduaction
包含六个源文件mainPage.py,creatDetailTable.py,creatTable.py,databaseOpetation.py,dataManager.py,dataManager.py
打包library.zip,其中所需的dll库和第三方库文件:
将所需文件拷贝到打包的exe文件中
最终的打包结果:
在打包的结果中可以看见,cx-freeze将每个python文件都打包为exe文件,并且将所需的dll和pyd资源文件都打包到对应的目录中。
打包生成的文件结构:
5. 程序运行:
由于mainPage.exe为程序的入口函数,因此运行mainPage.exe可以正常执行。由于在win7上编译生成的,需要在其他平台上已经运行检测。
文件夹中已经添加了必要的dll,但在其他机子上运行程序失败,出现了下面的情况,只能在本机运行,不能在其他机器上进行运行在xp的平台上运行,发现失败如下:
使用Process Explorer查看程序所使用的dll
Process Explorer是一个很有用的工具。由Sysinternals开发的Windows系统和应用程序监视工具,目前已并入微软旗下。不仅结合了Filemon(文件监视器)和Regmon(注册表监视器)两个工具的功能,还增加了多项重要的增强功能。包括稳定性和性能改进、强大的过滤选项、修正的进程树对话框(增加了进程存活时间图表)、可根据点击位置变换的右击菜单过滤条目、集成带源代码存储的堆栈跟踪对话框、更快的堆栈跟踪、可在 64位 Windows 上加载 32位 日志文件的能力、监视映像(dll和内核模式驱动程序)加载、系统引导时记录所有操作等。(来自百度百科的解释),既然可以监视dll,那么在发布程序前,可以用Qt Creator运行将要发布的程序,在Process Explorer中查看exe使用的dll,一般来说,程序运行失败很可能就是少了对应的dll文件。
如下是本例程序所需要的dll列表:
将所需的dll文件全部拷贝到exe文件同级目录中,在xp系统上可以正常运行。
2、跨平台的时候可能存在缺少dll文件的可能性,因此需要在release的时候将所有的dll文件都打包到一起;
cx-freeze:
1. 安装步骤:step1: 安装,pip install cx_freeze
step2:在cmd中,切换到Python安装目录的Scripts目录,比如我的为c:\Python32\Scripts 运行cxfreeze-postinstall
python cxfreeze-postinstall
step3:检测是否安装成功,cxfreeze -h
2. cx-freeze打包:
打包命令:python setup.py build
其中打包的脚本命令如下:
python setup.py build setup.py import sys from cx_Freeze import setup, Executable #打包所需要的第三库 build_exe_options = {"packages": ["sys"], "includes ": ['PyQt5.QtGui','xlsxwriter','xlrd','PyQt5.QtWidgets','PyQt5.QtCore','PyQt5.QtPrintSupport']} base = None if sys.platform == 'win32': base = 'Win32GUI' options = { 'build_exe': { 'includes': 'atexit' } } executables = [ Executable('mainPage.py', base=base), Executable('creatDetailTable.py'), Executable('creatTable.py'), Executable('databaseOpetation.py'), Executable('dataManager.py'), Executable('fileReader.py') ] setup(name='education', version='0.1', description='education software', options=options, executables=executables )
3. 打包脚本说明:
build_exe_options 打包所需的第三方库
executables 可执行的文件
setup 可执行文件相关信息
4. 打包过程:
python源文件,路径C:\Python33\Lib\site-packages\cx_Freeze\samples\eduaction
包含六个源文件mainPage.py,creatDetailTable.py,creatTable.py,databaseOpetation.py,dataManager.py,dataManager.py
打包library.zip,其中所需的dll库和第三方库文件:
将所需文件拷贝到打包的exe文件中
最终的打包结果:
在打包的结果中可以看见,cx-freeze将每个python文件都打包为exe文件,并且将所需的dll和pyd资源文件都打包到对应的目录中。
打包生成的文件结构:
文件目录: │ creatDetailTable.py │ creatTable.py │ databaseOpetation.py │ dataManager.py │ fileReader.py │ mainPage.py │ setup.py │ └─build └─exe.win32-3.3 │ creatDetailTable.exe │ creatTable.exe │ databaseOpetation.exe │ dataManager.exe │ fileReader.exe │ icudt49.dll │ icuin49.dll │ icuuc49.dll │ libGLESv2.dll │ library.zip │ mainPage.exe │ pyexpat.pyd │ PyQt5.QtCore.pyd │ PyQt5.QtGui.pyd │ PyQt5.QtPrintSupport.pyd │ PyQt5.QtWidgets.pyd │ python33.dll │ pywintypes33.dll │ Qt5Core.dll │ Qt5Gui.dll │ Qt5PrintSupport.dll │ Qt5Widgets.dll │ select.pyd │ sip.pyd │ sqlite3.dll │ unicodedata.pyd │ win32api.pyd │ _bz2.pyd │ _decimal.pyd │ _elementtree.pyd │ _hashlib.pyd │ _lzma.pyd │ _socket.pyd │ _sqlite3.pyd │ _ssl.pyd │ ├─imageformats │ qgif.dll │ qico.dll │ qjpeg.dll │ qmng.dll │ qsvg.dll │ qtga.dll │ qtiff.dll │ qwbmp.dll │ └─platforms qminimal.dll qoffscreen.dll qwindows.dll
5. 程序运行:
由于mainPage.exe为程序的入口函数,因此运行mainPage.exe可以正常执行。由于在win7上编译生成的,需要在其他平台上已经运行检测。
文件夹中已经添加了必要的dll,但在其他机子上运行程序失败,出现了下面的情况,只能在本机运行,不能在其他机器上进行运行在xp的平台上运行,发现失败如下:
使用Process Explorer查看程序所使用的dll
Process Explorer是一个很有用的工具。由Sysinternals开发的Windows系统和应用程序监视工具,目前已并入微软旗下。不仅结合了Filemon(文件监视器)和Regmon(注册表监视器)两个工具的功能,还增加了多项重要的增强功能。包括稳定性和性能改进、强大的过滤选项、修正的进程树对话框(增加了进程存活时间图表)、可根据点击位置变换的右击菜单过滤条目、集成带源代码存储的堆栈跟踪对话框、更快的堆栈跟踪、可在 64位 Windows 上加载 32位 日志文件的能力、监视映像(dll和内核模式驱动程序)加载、系统引导时记录所有操作等。(来自百度百科的解释),既然可以监视dll,那么在发布程序前,可以用Qt Creator运行将要发布的程序,在Process Explorer中查看exe使用的dll,一般来说,程序运行失败很可能就是少了对应的dll文件。
如下是本例程序所需要的dll列表:
将所需的dll文件全部拷贝到exe文件同级目录中,在xp系统上可以正常运行。
注意事项:
1、cx-freeze不能将所需文件打包为单个的可执行文件,需要进行二次的打包;2、跨平台的时候可能存在缺少dll文件的可能性,因此需要在release的时候将所有的dll文件都打包到一起;
参考资源:
http://cx-freeze.readthedocs.io/en/latest/overview.html 官方网站相关文章推荐
- 如何打包python应用(二)
- C#如何为winform程序打包发布应用
- C#如何为winform程序打包发布应用(图解教程)
- C#如何为winform程序打包发布应用(图解教程)
- C#如何为winform程序打包发布应用(图解)
- C#如何为winform程序打包发布应用(图解教程)
- Python应用第一波:文件打包备份
- 如何发布打包并发布自己的Android应用(续)
- python程序使用pyinstaller打包成单一.exe文件后,如何的到.exe文件所在目录?
- 如何将Web应用打包成.war文件?
- 如何发布打包并发布自己的Android应用(续)
- C#如何为winform程序打包发布应用(图解教程)
- C#如何为winform程序打包发布应用
- C#如何为winform程序打包发布应用(图解教程)
- C#如何为winform程序打包发布应用 (图解教程)
- C#如何为winform程序打包发布应用(图解教程)
- C#如何为winform程序打包发布应用(图解)
- C#如何为winform程序打包发布应用(图解)
- 图解C#如何为winform程序打包发布应用
- 如何发布打包并发布自己的Android应用(APP)