Python 2.7:从pyinstaller创建的exe文件不起作用

时间:2019-04-26 12:32:58

标签: python windows module exe pyinstaller

我跟随this article使用pyinstaller创建了我的 run.exe 文件。我按预期将exe文件放在dist文件夹中,没有任何错误。但是当我双击exe文件时,什么也没发生。当我从命令提示符运行exe文件时,出现以下错误:

Traceback (most recent call last):
  File "run.py", line 2, in <module>
  File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 395, in load_module
    exec(bytecode, module.__dict__)
  File "site-packages\PySimpleGUI27\__init__.py", line 2, in <module>
  File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 395, in load_module
    exec(bytecode, module.__dict__)
  File "site-packages\PySimpleGUI27\PySimpleGUI27.py", line 14, in <module>
  File "site-packages\future\standard_library\__init__.py", line 459, in install_aliases
ImportError: No module named UserList
[16016] Failed to execute script run

我不明白此错误。我的脚本中没有任何模块名称 Userlist 。下面是我的脚本:

import PySimpleGUI27 as sg
import parse

layout = [               
    [sg.Text('A2L File', size=(15, 1), auto_size_text=False, justification='right'),      
     sg.InputText('',key='_a2l_'), sg.FileBrowse(file_types=(("A2L File", "*.a2l"),))],
    [sg.Text('Signals Lexicon', size=(15, 1), auto_size_text=False, justification='right'),      
     sg.InputText('',key='_sigLex_'), sg.FileBrowse(file_types=(("Excel File", "*.xlsx"),))],
    [sg.Text('Parameters Lexicon', size=(15, 1), auto_size_text=False, justification='right'),      
     sg.InputText('',key='_parLex_'), sg.FileBrowse(file_types=(("Excel File", "*.xlsx"),))],
    [sg.Text('Module Name', size=(15, 1), auto_size_text=False, justification='right'),      
     sg.InputText('X',key='_module_'), sg.FolderBrowse()],           
    [sg.Submit(), sg.Cancel()],
    [sg.Output(size=(60, 20))]  
]
window = sg.Window('A2L Parser', default_element_size=(40, 1)).Layout(layout)

values_dict={}
while True:
    button, values_dict = window.Read()
    if button=="Cancel" or button is None:
        break
    elif button=='Submit' and (not any(value == '' for value in values_dict.values())):   
        parse.parser(values_dict['_a2l_'], values_dict['_sigLex_'], values_dict['_parLex_'],window)

    else:
        sg.Popup("Please select files")  

window.Close()

当我从Visual代码运行该脚本时,它可以工作,因此脚本中没有错误。在此脚本中,我将导入自己的脚本 parse 。 有人可以解释一下exe文件有什么问题吗?

更新:我发现我必须在脚本中添加这些缺少的模块。但是在添加每个模块后,我得到另一个缺少的模块的错误。有没有办法一次性找到所有缺少的模块?

1 个答案:

答案 0 :(得分:0)

根据错误,这是解决方法:

  1. 使用任何文本编辑器打开此site-packages\future\standard_library\__init__.py文件

  2. 第459行应为“ __import __(oldmodname)”,并且应位于函数“ install_aliases()”中

  3. 只需在“ __import __(oldmodname)”之前添加以下行:

    if 0:
        import UserList
        import UserString
        import UserDict
        import itertools
        import collections
        import future.backports.misc
        import commands
        import base64
        import __buildin__
        import math
        import reprlib
        import functools
        import re
        import subprocess
  1. 保存并关闭此文件。然后重试。

我们添加以上行的原因,请参阅https://github.com/pyinstaller/pyinstaller/issues/2820

此替代方法对我有效。而且,如果您觉得将代码段插入其他位置更好,请自行进行调整。