Python PyInstaller问题+;二号

Python PyInstaller问题+;二号,python,pyinstaller,Python,Pyinstaller,对编码来说相当陌生,我正在接受一个项目,从Excel表格中分析数据并输出几个绘图。当我以.py的形式运行Sublime 3中的脚本时,它是完美的,只需不超过30秒。我尝试通过PyInstaller将其从.py转换为.exe,但一直遇到相同的问题: Exception in Tkinter callback Traceback (most recent call last): File "site-packages\plotly\express\_core.py", lin

对编码来说相当陌生,我正在接受一个项目,从Excel表格中分析数据并输出几个绘图。当我以.py的形式运行Sublime 3中的脚本时,它是完美的,只需不超过30秒。我尝试通过PyInstaller将其从.py转换为.exe,但一直遇到相同的问题:

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可能也是一个问题。我尝试创建一个新文件夹,并将plotly.json文件复制/粘贴到那里,然后通过Sublime 3将新文件夹的绝对路径放入.spec中的data=[]中,但每次它在其中查找的路径都在更改


实际上,除了将其编译成exe之外,一切都工作正常。

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

- main.py
- hooks
  - hook-plotly.py
然后,在
内钩住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\\u MEI133402\plotly\package\u 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的路径。将您的json文件名和目录附加到此

WOW!这成功了!非常感谢你。它花了很长时间才完成,不管出于什么原因,它需要几分钟的时间来启动,但它确实有效!非常感谢你!