python pyinstaller问题
发布网友
发布时间:2022-04-23 07:38
我来回答
共1个回答
热心网友
时间:2022-04-28 08:23
打包python脚本为exe的坎坷经历, by pyinstaller方法
又应验了那句歌词. 不经历风雨, 怎么见得了彩虹.
安装过程略去不提, 仅提示: pip install pyinstaller
打包指令
粗看包里的文档, 然后开始打包:
打开console
就用了这个命令: pyinstaller monitor_rt_quotes.py
结果就是比预期麻烦的多的多的: 干活, 硬盘不停地balabala叫, 漫长
这里记录一下控制台显示的提示信息:
官方文档对上述指令的解释为:
|PyInstaller| analyzes myscript.py and:
Writes myscript.spec in the same folder as the script.
Creates a folder build in the same folder as the script if it does not exist.
Writes some log files and working files in the build folder.
Creates a folder dist in the same folder as the script if it does not exist.
Writes the myscript executable folder in the dist folder.
In the dist folder you find the bundled app you distribute to your users.
巨长的提示后, 得到了exe文件, 有18Mb的大小(太庞大了, 肥肥肥!!!), 但是结果很悲剧:
D:\DB\fz\build\monitor_rt_quotes>monitor_rt_quotes.exe sz000911
Error loading Python DLL: D:\DB\fz\build\monitor_rt_quotes\python27.dll (error code 126)
估计是没有添加必要的打包选项造成的. 继续努力.
不死心! 解决问题需要由简到繁, 先从hellowworld.py做起. 搞定了.
被打包的文件: helloworld.py, 人人皆知.
打包的命令: pyinstaller -D helloworld.py
打包的console提示: 见随后的引述块
打包发布exe时的纪律(注意事项):
很简单的py脚本. Simple is better than complex. 应该遵守Python的规则.
所以在打包为exe时, 应该尽量减少没有必要的python包的导入. 否则吃的太胖
可以运行的exe文件位于: dist 目录下, 而不是build目录下的.
运行后的结果:
D:\DB\fz>pyinstaller -D helloworld.py155 INFO: PyInstaller: 3.2.1155 INFO: Python: 2.7.11155 INFO: Platform: Windows-XP-5.1.2600-SP3155 INFO: wrote D:\DB\fz\helloworld.spec155 INFO: UPX is not available.155 INFO: Extending PYTHONPATH with paths
['D:\\DB', 'D:\\DB\\fz']155 INFO: checking Analysis155 INFO: Building Analysis because out00-Analysis.toc is non existent155 INFO: Initializing mole dependency graph...155 INFO: Initializing mole graph hooks...312 INFO: running Analysis out00-Analysis.toc327 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable required by d:\anaconda2\python.exe327 INFO: Found C:\WINDOWS\WinSxS\Policies\x86_policy.9.0.Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_x-ww_b7353f75\9.0.30729.1.policy327 INFO: Searching for assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww ...327 INFO: Found manifest C:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e.manifest327 INFO: Searching for file msvcr90.dll327 INFO: Found file C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e\msvcr90.dll327 INFO: Searching for file msvcp90.dll327 INFO: Found file C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e\msvcp90.dll327 INFO: Searching for file msvcm90.dll343 INFO: Found file C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e\msvcm90.dll343 INFO: Found C:\WINDOWS\WinSxS\Policies\x86_policy.9.0.Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_x-ww_b7353f75\9.0.30729.1.policy343 INFO: Adding redirect Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0,30729, 1)484 INFO: Caching mole hooks...500 INFO: Analyzing D:\DB\fz\helloworld.py500 INFO: Loading mole hooks...500 INFO: Loading mole hook "hook-encodings.py"...5405 INFO: Loading mole hook "hook-httplib.py"...5421 INFO: Looking for ctypes DLLs5437 INFO: Analyzing run-time hooks ...5452 INFO: Looking for dynamic libraries6155 INFO: Looking for eggs6155 INFO: Using Python library d:\anaconda2\python27.dll6171 INFO: Found binding redirects:[BindingRedirect(name=u'Microsoft.VC90.CRT', language=None, arch=u'x86', oldVersion=(9, 0, 21022, 8), newVersion=(9, 0, 30729, 1), publicKeyToken=u'1fc8b3b9a1e18e3b')]6187 INFO: Warnings written to D:\DB\fz\build\helloworld\warnhelloworld.txt6280 INFO: checking PYZ6296 INFO: Building PYZ because out00-PYZ.toc is non existent6296 INFO: Building PYZ (ZlibArchive) D:\DB\fz\build\helloworld\out00-PYZ.pyz6968 INFO: Building PYZ (ZlibArchive) D:\DB\fz\build\helloworld\out00-PYZ.pyz completed successfully.7062 INFO: checking PKG7062 INFO: Building PKG because out00-PKG.toc is non existent7077 INFO: Building PKG (CArchive) out00-PKG.pkg7125 INFO: Building PKG (CArchive) out00-PKG.pkg completed successfully.7140 INFO: Bootloader d:\anaconda2\lib\site-packages\PyInstaller\bootloader\Windows-32bit\run.exe7140 INFO: checking EXE7155 INFO: Building EXE because out00-EXE.toc is non existent7155 INFO: Building EXE from out00-EXE.toc7171 INFO: Appending archive to EXE D:\DB\fz\build\helloworld\helloworld.exe7171 INFO: Building EXE from out00-EXE.toc completed successfully.7187 INFO: checking COLLECT7202 INFO: Building COLLECT because out00-COLLECT.toc is non existent7202 INFO: Building COLLECT out00-COLLECT.toc7218 INFO: Redirecting Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0, 30729, 1)7375 INFO: Redirecting Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0, 30729, 1)7390 INFO: Updating manifest in C:\Documents and Settings\Administrator\Application Data\pyinstaller\bincache00_py27_32bit\python27.dll7405 INFO: Updating resource type 24 name 2 language 10337468 INFO: Redirecting Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0, 30729, 1)7484 INFO: Updating manifest in C:\Documents and Settings\Administrator\Application Data\pyinstaller\bincache00_py27_32bit\unicodedata.pyd7500 INFO: Updating resource type 24 name 2 language 10337546 INFO: Redirecting Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0, 30729, 1)7562 INFO: Updating manifest in C:\Documents and Settings\Administrator\Application Data\pyinstaller\bincache00_py27_32bit\_hashlib.pyd7562 INFO: Updating resource type 24 name 2 language 10337609 INFO: Redirecting Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0, 30729, 1)7625 INFO: Updating manifest in C:\Documents and Settings\Administrator\Application Data\pyinstaller\bincache00_py27_32bit\_ctypes.pyd7640 INFO: Updating resource type 24 name 2 language 10337687 INFO: Redirecting Microsoft.VC90