Python程序打包--PyInstaller

Python程序打包,首选“PyInstaller”,操作简单,功能丰富,而且它还支持Python2.7和Python3.3+

安装PyInstaller

pip install pyinstaller

进入cmd,切换到解压的文件夹内
命令的语法如下
python pyinstaller.py [opts] yourprogram.py
yourprogram.py可以包含路径 比如 D:test.py
再说选项
这里只说几个有用的
-F, –one 生成单一可执行文件
-D, –onedir 生成一个文件夹,里面包含需要的dll之类的东西 这个是默认的 也就是说不需要设置页可以使用
-o DIR, –out=DIR 文件输出目录 可以不用
-c, –console, –nowindowed 是否先出现一个黑色命令行然后再运行程序 默认方式
-w, –windowed, –noconsole 设置无黑色命令行模式
-i FILE.ICO, -i FILE.EXE,ID, -i FILE.ICNS, –icon=FILE.ICO, –icon=FILE.EXE,ID, –icon=FILE.ICNS
这里很复杂 但是要用的话 通常用来指定程序图标, 不然图标就太难看了。。
-i 图标文件路径 这样就能使用了
综上所述 刨除无关的 我们基本上需要用到这样的命令
python pyinstaller.py -F -w -i 图标路径 yourprogram.py
这样能指定图标 且 单文件

同时还有另一个方法,通过 xxx.spec文件生成 这个文件会在前面那条命令生成的目录里面
python pyinstaller.py [opts] your-program.spec
选项类型是一样的 但是通过上面的方法生成的 不填写的话 自身参数是上一条命令指定的

我们由于用到了cx_Oracle,运行的时候出现了坑爹的提示
cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle
这条提示是在有黑色命令行的情况 就是 -c 的情况

原因是缺少了 oraociei11.dll(Oracle 11g R2的话, 其他版本有一点变化)
解决方法 就是用到了 xxx.spec文件 不过需要修改
如果是 文件夹模式编译的 就在
coll = COLLECT( exe,
a.binaries ,
strip=False,
upx=False, 省略。。。。
a.binaries后面加上 缺少的dll的信息
形如
coll = COLLECT( exe,
a.binaries + [(‘oraociei11.dll’, ‘D:oraociei11.dll’, ‘BINARY’)],
strip=False,
upx=False,
其中D:oraociei11.dll就是dll的位置

如果是单文件生成的话,类似的改成
exe = EXE(pyz,
a.scripts,
a.binaries + [(‘oraociei11.dll’, ‘D:oraociei11.dll’, ‘BINARY’)],
a.zipfiles,
a.datas,
name=os.path.join(‘dist’, ‘worconquer.exe’),
debug=False,
strip=None,
upx=True,
注意红字部分

还有就是 不修改spec文件 

事实上,PyInstaller文档上还提到了一种方法,直接用“--add-data”命令,也可以办到,另外可以换成自己的图标,可以用“--icon”命令。其中,最后的“--clean”命令是清缓存。命令如下:

pyinstaller --add-data=CheckLicense.exe;. --add-data=EncryptorDll.dll;. --icon=umbrella.ico --onefile --clean CheckLicenseEx.py

猜你喜欢

转载自www.cnblogs.com/zpw-1/p/9836456.html