我跟随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文件有什么问题吗?
更新:我发现我必须在脚本中添加这些缺少的模块。但是在添加每个模块后,我得到另一个缺少的模块的错误。有没有办法一次性找到所有缺少的模块?
答案 0 :(得分:0)
根据错误,这是解决方法:
使用任何文本编辑器打开此site-packages\future\standard_library\__init__.py
文件
第459行应为“ __import __(oldmodname)”,并且应位于函数“ install_aliases()”中
只需在“ __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
我们添加以上行的原因,请参阅https://github.com/pyinstaller/pyinstaller/issues/2820
此替代方法对我有效。而且,如果您觉得将代码段插入其他位置更好,请自行进行调整。