为了账号安全,请及时绑定邮箱和手机立即绑定

python中的程序用pyinstaller打包后无法运行

python中的程序用pyinstaller打包后无法运行

慕桂英3389331 2023-08-08 16:42:42
我的程序(.py)在 vscode 平台上完美运行。然而,用pyinstaller打包成.exe文件后,似乎不起作用。错误消息是“ModuleNotFoundError:没有名为plotly.validators.scatter的模块” 这是我的代码“气泡图”:# Bubble Diagram Version3.0import tkinter as tkimport tkinter.filedialog as fdimport plotly as pyimport plotly.graph_objs as goimport openpyxlimport pandas as pdimport osclass App(tk.Tk):    def __init__(self):        super().__init__()        self.path1 = fd.StringVar()        self.path2 = fd.StringVar()        self.name_input = fd.StringVar()        group_1 = tk.LabelFrame(self, padx=15, pady=10,                                text="Input and Output Settings")        group_1.pack(padx=10, pady=5)        tk.Label(group_1, text='Step1').grid(row=0, column=0)        tk.Button(group_1, text="Import data from", bg='green',                  width=20, command=self.choose_file).grid(row=0, column=1)        tk.Label(group_1, textvariable=self.path1, width=40, bg='grey', fg='white').grid(row=0, column=2, pady=5)        tk.Label(group_1, text='Step2').grid(row=1, column=0)        tk.Button(group_1, text="Set output path", bg='orange',                  width=20, command=self.choose_directory).grid(row=1, column=1)        tk.Label(group_1, textvariable=self.path2, width=40, bg='grey', fg='white').grid(row=1, column=2, pady=5)        tk.Label(group_1, text='Step3').grid(row=2, column=0)        tk.Label(group_1, text='Input name WITHOUT suffix', bg='SteelBlue', width=20).grid(row=2, column=1)        tk.Entry(group_1, textvariable=self.name_input, bg='grey', width=40).grid(row=2, column=2)        group_2 = tk.LabelFrame(self, padx=15, pady=10, text="Implementation")        group_2.pack(padx=10, pady=5)        tk.Label(group_2, text='Step4').grid(row=0, column=0)        tk.Button(group_2, text="Start to plot", bg='red',                  width=10, command=self.start).grid(row=0, column=1)            ),我应该怎么做才能解决问题?谢谢
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

那么你还在为此苦苦挣扎吗?


您需要更新规范文件的“data”和“hiddenimports”部分,以确保库被导入。我在下面向您展示了我的(效果很好)。您需要修改它以包含 openpyxl、tkinter 和 pandas。


a = Analysis(['main.py'],

             pathex=['C:\\Users\\user\\PycharmProjects\\PlotlyExample'],

             binaries=[],

             datas=[('C:\\Users\\user\\PycharmProjects\\PlotlyExample\\venv\\Lib\\site-packages\\plotly\\', 'plotly'),

             ('C:\\Users\\user\\PycharmProjects\\PlotlyExample\\venv\\Lib\\site-packages\\kaleido\\', 'kaleido'),

             ('C:\\Users\\user\\PycharmProjects\\PlotlyExample\\venv\\Lib\\site-packages\\pptx\\', 'pptx'),],

             hiddenimports=['pandas','numpy','plotly','pptx'],

             hookspath=[],

             runtime_hooks=[],

             excludes=[],

             win_no_prefer_redirects=False,

             win_private_assemblies=False,

             cipher=block_cipher,

             noarchive=False)

实际上,我遇到了与您关于plotly.json 相同的错误,所以我知道上述解决方案有效。:)


同样重要的是,如果您要导出静态图像,请在规范文件中包含 Kaleido 或 Orcas。我正在使用 Kaleido,因此您可以在我的规范文件设置中看到它。


然后通过以下方式运行 PyInstaller: pyinstaller main.spec --clean


其中 main.spec 是您的规范文件(更改名称)。


编辑:为了让事情变得更容易,这是我的整个规范文件:


# -*- mode: python ; coding: utf-8 -*-

# Command to compile the spec and python files

# pyinstaller main.spec --clean --onefile


block_cipher = None



a = Analysis(['main.py'],

             pathex=['C:\\Users\\user\\PycharmProjects\\PlotlyExample'],

             binaries=[],

             datas=[('C:\\Users\\user\\PycharmProjects\\PlotlyExample\\venv\\Lib\\site-packages\\plotly\\', 'plotly'),

             ('C:\\Users\\user\\PycharmProjects\\PlotlyExample\\venv\\Lib\\site-packages\\kaleido\\', 'kaleido'),

             ('C:\\Users\\user\\PycharmProjects\\PlotlyExample\\venv\\Lib\\site-packages\\pptx\\', 'pptx'),],

             hiddenimports=['pandas','numpy','plotly','pptx'],

             hookspath=[],

             runtime_hooks=[],

             excludes=[],

             win_no_prefer_redirects=False,

             win_private_assemblies=False,

             cipher=block_cipher,

             noarchive=False)

pyz = PYZ(a.pure, a.zipped_data,

             cipher=block_cipher)

exe = EXE(pyz,

          a.scripts,

          [],

          exclude_binaries=True,

          name='main',

          debug=False,

          bootloader_ignore_signals=False,

          strip=False,

          upx=True,

          console=True )

coll = COLLECT(exe,

               a.binaries,

               a.zipfiles,

               a.datas,

               strip=False,

               upx=True,

               upx_exclude=[],

               name='main')


查看完整回答
反对 回复 2023-08-08
  • 1 回答
  • 0 关注
  • 230 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信