pyinstaller 打包时出错解决方案

最近用pyqt写了一个小程序,打包成exe时候时候遇到一个奇怪的问题:点击生成的exe完全没有反应。

那么,请在生成exe的命令中去掉-w参数,让程序有控制台可以输出错误信息。

打包的py文件可以写成如下形式,当然用命令行也可以。

#!/usr/bin/env python3
#  -*- coding: utf-8 -*-
from PyInstaller.__main__ import run
#  -F:打包成一个EXE文件
#  -w:不带console输出控制台,window窗体格式
#  --paths:依赖包路径
#  --icon:图标
#  --noupx:不用upx压缩
#  --clean:清理掉临时文件

if __name__ == '__main__':
    opts = ['-F',
            #'--paths=D:\\Program Files\\Python\\Lib\\site-packages\\PyQt5\\Qt\\bin',
            #'--paths=D:\\Program Files\\Python\\Lib\\site-packages\\jpype',
            #'--noupx',
            #'--clean',
            #'--hidden-import=numpy',
            'main.py']
    run(opts)

再次运行exe,在控制台(黑色命令窗口)中出现如下错误信息:

ImportError: numpy.core.multiarray failed to import
Traceback (most recent call last):
  File "main.py", line 6, in 
  File "D:\Program Files\Python\lib\site-packages\pyinstaller-3.4.dev0+355f0c76b-py3.6.egg\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
    exec(bytecode, module.__dict__)
  File "figure.py", line 1, in 
  File "D:\Program Files\Python\lib\site-packages\pyinstaller-3.4.dev0+355f0c76b-py3.6.egg\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\jpype\__init__.py", line 17, in 
  File "D:\Program Files\Python\lib\site-packages\pyinstaller-3.4.dev0+355f0c76b-py3.6.egg\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\jpype\_jpackage.py", line 18, in 
ImportError: numpy.core.multiarray failed to import
[13484] Failed to execute script main

其中有两条重要的信息:

1、ImportError: numpy.core.multiarray failed to import

2、[1852] Failed to execute script main

中间的信息无非是你程序中哪个地方引用了这个失败的包。

在网上搜第一条错误信息,会出现大量的升级numpy包就可以了的信息。但是请注意,你是在打包之后才出现的问题,打包之前是能正常运行的,所以是打包出的错,并不是numpy版本有问题。但是这时可以先升级numpy包版本。

此后新建一个测试py文件,import numpy,此时对此新的py文件打包时直接报错,根本不能生成exe文件。直接看报错信息,在网上搜,就可以得到结果,说是setuptools版本太低,导致打包出错。参考https://github.com/pyinstaller/pyinstaller/issues/3507

错误和解决办法都在里面。

错误内容大概如下:

File "f:\anaconda\lib\site-packages\PyInstaller\hooks\pre_safe_import_module\hook-setuptools.extern.six.moves.py", line 34, in pre_safe_import_module
for real_module_name, six_module_name in real_to_six_module_name.items():
AttributeError: 'str' object has no attribute 'items'

解决办法就是升级setuptools,具体方法在cmd命令窗口中使用:pip install -U setuptools

完了能够正常打包运行!问题解决。

总结:出现问题之后要多做实验,多思考原理。

你可能感兴趣的:(pyinstaller 打包时出错解决方案)