PyInstaller 问题 + Errno 2

PyInstaller Issues + Errno 2

对编码还很陌生,我正在做一个项目来分析来自 Excel sheet 的数据并输出几个图。当我 运行 Sublime 3 中的脚本作为 .py 时,它是完美无缺的,并且不超过 30 秒。我尝试通过 PyInstaller 将它从 .py 转换为 .exe,但我一直 运行ning 遇到同样的问题:

Exception in Tkinter callback
Traceback (most recent call last):
  File "site-packages\plotly\express\_core.py", line 887, in apply_default_cascade
  File "site-packages\plotly\io\_templates.py", line 89, in __getitem__
  File "pkgutil.py", line 637, in get_data
  File "c:\users\shaba\appdata\local\programs\python\python37-32\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 471, in get_data
    with open(path, 'rb') as fp:
**FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\shaba\AppData\Local\Temp\_MEI133402\plotly\package_data\templates\plotly.json'**

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "tkinter\__init__.py", line 1705, in __call__
  File "SHProject.py", line 53, in fp
  File "SHProject.py", line 107, in project
  File "site-packages\plotly\express\_chart_types.py", line 1186, in density_mapbox
  File "site-packages\plotly\express\_core.py", line 1829, in make_figure
  File "site-packages\plotly\express\_core.py", line 890, in apply_default_cascade
  File "site-packages\plotly\graph_objs\layout\_template.py", line 306, in __init__
**ValueError: The first argument to the plotly.graph_objs.layout.Template
constructor must be a dict or
an instance of :class:`plotly.graph_objs.layout.Template**

现在,我对第一个粗体错误更感兴趣,但下面的 ValueError 可能也是一个问题。我尝试创建一个新文件夹和 copy/pasting 那里的 plotly.json 文件,并通过 Sublime 3 将新文件夹的绝对路径放入 .spec 中的 data=[] 中,但每次它都在寻找它的路径正在改变?

从字面上看,除了将其编译成 exe 之外,一切都运行良好。

创建一个名为 hook-plotly.py 的文件,并将其放在脚本旁边的目录 hooks 中。像这样:

- main.py
- hooks
  - hook-plotly.py

然后,在hook-plotly.py里面:

from PyInstaller.utils.hooks import collect_all

datas, binaries, hiddenimports = collect_all('plotly')

然后用命令行参数构建--additional-hooks-dir=hooks.

exe正在从C:\Users\shaba\AppData\Local\Temp\_MEI133402\plotly\package_data\templates\plotly.json这里搜索文件。

使用此方法在代码中获取 exe/Code 路径并构建文件路径,以便在正确的文件夹中搜索文件。

import sys
if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(sys.executable)
elif __file__:
    application_path = os.path.dirname(__file__)
    application_path, ignor = os.path.split(application_path)

所以在应用程序路径中,您将获得此 py 文件的路径或 exe.append 您的 json 文件名和目录