利来w66官网入口
  咨询电话:15380036213

利来w66网址备用登录

pyinstaller打包注意事项

pyinstaller是可以加密的,目前是最好用的一个,通过对比py2exe,nutika等。

环境 3.6

命令行用法:pyinstaller.exe --key 1234567890123456 -F -w -i icon_filepath --paths=C:Python36Libsite-packagesPyQt5Qtin;C:Python36Libsite-packagesPyQt5Qtplugins hello.py

参数解释:--key 加密-F 1个文件-w 表示是带界面的程序。则打包后没有cmd窗口。-i icon图标位置

完整:-F, –onefile产生一个文件用于部署 (参见XXXXX).-D, –onedir产生一个目录用于部署 (默认)-K, –tk在部署时包含 TCL/TK-a, –ascii不包含编码.在支持Unicode的python版本上默认包含所有的编码.-d, –debug产生debug版本的可执行文件-w,–windowed,–noconsole使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效)-c,–nowindowed,–console使用控制台子系统执行(默认)(只对Windows有效)-s,–strip可执行文件和共享库将run through strip.注意Cygwin的strip往往使普通的win32 Dll无法使用.-X, –upx如果有UPX安装(执行Configure.py时检测),会压缩执行文件(Windows系统中的DLL也会)(参见note)-o DIR, –out=DIR指定spec文件的生成目录,如果没有指定,而且当前目录是PyInstaller的根目录,会自动创建一个用于输出(spec和生成的可执行文件)的目录.如果没有指定,而当前目录不是PyInstaller的根目录,则会输出到当前的目录下.-p DIR, –path=DIR设置导入路径(和使用PYTHONPATH效果相似).可以用路径分割符(Windows使用分号,Linux使用冒号)分割,指定多个目录.也可以使用多个-p参数来设置多个导入路径–icon=<FILE.ICO>将file.ico添加为可执行文件的资源(只对Windows系统有效)–icon=<FILE.EXE,N>将file.exe的第n个图标添加为可执行文件的资源(只对Windows系统有效)-v FILE, –version=FILE将verfile作为可执行文件的版本资源(只对Windows系统有效)-n NAME, –name=NAME可选的项目(产生的spec的)名字.如果省略,第一个脚本的主文件名将作为spec的名字————————

错误:1打开命令行输入x.exe回车发现错误:ModuleNotFoundError:No module named typedefs,经过不断搜索发现是sklearn和scipy库的问题,有些库不能自动导入,在.spec文件中将hiddenimports=[]修改为:hiddenimports=["cython", "sklearn", "sklearn.ensemble","sklearn.neighbors.typedefs","sklearn.neighbors.quad_tree","sklearn.tree._utils","scipy._lib.messagestream"]后,再运行命令pyinstaller x.spec,等它跑完之后再点击.exe文件会发现这个错误没有了~(好像是和pandas,scipy,sklearn相关的导入错误都可以这样QAQ)

错误:2错误:This application failed to start because it could not find or load the Qt platform plugin "windows"。缺少Qt组件无法正常启动,参考网上的评论,需要有...Qtpluginsplatforms这个文件夹,把这个文件夹拷贝到和.exe文件一个路径下,最终完美解决,出现了想要的Qt界面~

需要注意的问题:

3.1 如果你的GUI程序带有图片(或者其它资源)的文件夹(我的是在es文件夹下),需要把这个文件夹拷贝到.exe文件同一路径下。

3.2 如果你的.py文件不止一个,仅仅需要把其它.py文件都放在一个目录下,只对入口.py文件打包即可。

错误:4database error: driver not loadd driver not loaded复制 C:Python36Libsite-packagesPyQt5Qtplugins 里面的 sqldriver 文件夹到exe所在目录。

错误:5路径问题:

spec文件举例:# -*- mode: python -*-

block_cipher = pyi_crypto.PyiBlockCipher(key="0123456789123456")

a = Analysis(["1.py", "2.py"], pathex=["D:\0软件设计\aa软件版"],

binaries=[], datas=[], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher)pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, name="XX.exe", debug=False, strip=False, upx=True, runtime_tmpdir=None, console=False ,

icon="XXXX.ico")

——————pyinstaller xx.spec

 

千万注意,如果pyinstaller文件夹内放入UPX后,虽然可以压缩文件,但不知道为什么,打包带pyqt5的代码,exe运行会导致下面的错误。切记,切记。

DLL load failed: 内存位置访问无效。Traceback (most recent call last): File "xunlei_cdk_jihuo_0811.py", line 29, in <module> File "c:python36libsite-packagesPyInstallerloaderpyimod03_importers.py", line 714, in load_module module = loader.load_module(fullname)ImportError: DLL load failed: 内存位置访问无效。