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 文件名和目录
对编码还很陌生,我正在做一个项目来分析来自 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 文件名和目录