pyinstaller以情节

时间:2017-09-07 15:04:53

标签: python plotly pyinstaller

我正在使用pyinstaller编译我当前的程序,它似乎无法在plotly中处理所有必需的文件。它本身运行良好,没有情节,它也可以编译和运行。

似乎未能找到我甚至无法找到驱动器上任何位置的文件“default-schema.json”。

  

Traceback(最近一次调用最后一次):文件“comdty_runtime.py”,行   17,在文件“”中,第2237行,在   _find_and_load文件“”,第2226行,在_find_and_load_unlocked文件“”,第1191行,在_load_unlocked文件“”中,行   1161,在_load_backward_compatible文件中   “d:\用户\ ktehrani \应用程序数据\本地\连续\ anaconda3 \ ENVS \ PY34 \ LIB \网站-P   ackages \ PyInstaller \ loader \ pyimod03_importers.py“,第389行,in   load_module       exec(字节码,模块。字典)文件“actual_vs_mai.py”,第12行,在文件“”,第2237行,   _find_and_load文件“”,第2226行,在_find_and_load_unlocked文件“”,第1191行,在_load_unlocked文件“”中,行   1161,在_load_backward_compatible文件中   “d:\用户\ ktehrani \应用程序数据\本地\连续\ anaconda3 \ ENVS \ PY34 \ LIB \网站-P   ackages \ PyInstaller \ loader \ pyimod03_importers.py“,第389行,in   load_module       exec(字节码,模块。字典)文件“site-packages \ plotly__init __。py”,第31行,在文件中   “”,第2237行,在_find_and_load文件中   “”,第2226行,在_find_and_load_unlocked中   文件“”,第1191行,在_load_unlocked中   文件“”,第1161行,in   _load_backward_compatible文件“d:\ users * \ appdata \ local \ continuum \ anaconda3 \ envs \ py34 \ lib \ site-p   ackages \ PyInstaller \ loader \ pyimod03_importers.py“,第389行,in   load_module       exec(字节码,模块。字典)文件“site-packages \ plotly \ graph_objs__init __。py”,第14行,中
  文件“”,第2237行,在_find_and_load中   文件“”,第2226行,in   _find_and_load_unlocked文件“”,第1191行,在_load_unlocked文件“”中,行   1161,在_load_backward_compatible文件中   “d:\用户* \应用程序数据\本地\连续\ anaconda3 \ ENVS \ PY34 \ LIB \网站-P   ackages \ PyInstaller \ loader \ pyimod03_importers.py“,第389行,in   load_module       exec(字节码,模块。字典)文件“site-packages \ plotly \ graph_objs \ graph_objs.py”,第34行,in   文件“”,第2237行,在_find_and_load中   文件“”,第2226行,in   _find_and_load_unlocked文件“”,第1191行,在_load_unlocked文件“”中,行   1161,在_load_backward_compatible文件中   “d:\用户* \应用程序数据\本地\连续\ anaconda3 \ ENVS \ PY34 \ LIB \网站-P   ackages \ PyInstaller \ loader \ pyimod03_importers.py“,第389行,in   load_module       exec(字节码,模块。字典)文件“site-packages \ plotly \ graph_reference.py”,第578行,中
  文件“site-packages \ plotly \ graph_reference.py”,第70行,in   get_graph_referenc e文件   “站点包\ setuptools的-27.2.0-py3.4.egg \ pkg_resources__init __。PY”   li ne 1215,在resource_string文件中   “站点包\ setuptools的-27.2.0-py3.4.egg \ pkg_resources__init __。PY”   li ne 1457,在get_resource_string文件中   “站点包\ setuptools的-27.2.0-py3.4.egg \ pkg_resources__init __。PY”   li 1530,在_get文件中   “d:\用户* \应用程序数据\本地\连续\ anaconda3 \ ENVS \ PY34 \ LIB \网站-P   ackages \ PyInstaller \ loader \ pyimod03_importers.py“,第474行,in   GET_DATA       open(path,'rb')为fp:FileNotFoundError:[Errno 2]没有这样的文件或目录:'H:\ Python \ Commodity_M   AI_Trade_List \代码\ DIST \ comdty_runtime \ plotly \ package_data \默认模式。   json'无法执行脚本comdty_runtime

4 个答案:

答案 0 :(得分:5)

我遇到了同样的问题,并在pyinstaller文档中找到了解决方法:

pyinstaller创建一个与.py文件同名的.spec文件。 在=分析下,您将找到数据= []

a = Analysis(['graphic_interface.py'],
             pathex=[xxx],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

您添加了plot的路径。相对路径对我不起作用,所以我设置了绝对路径

datas=[('C:\\Users\\Me\\PycharmProjects\\Project\\venv\\Lib\\site-packages\\plotly\\', 'plotly')],

现在您必须在运行pyinstaller时使用spec文件

pyinstaller myproject.spec myproject.py

您不必担心oneFile等其他命令,因为它们已经保存在.spec文件中

答案 1 :(得分:3)

这可能无法解决您的问题,但可以解决我的Plotly地图问题。我将此代码放入.spec文件中,并在通过PyInstaller之后能够运行Plotly图表。无法显示我的地图,并收到错误消息。

File "<frozen importlib._bootstrap>"
ModuleNotFoundError: No module named 'plotly.validators.choropleth' pyinstaller

现在它可以使用以下功能:

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

import sys
sys.setrecursionlimit(5000)

block_cipher = None


a = Analysis(['napdgui.py'],
             pathex=['C:\\Users\\USERNAME\\Desktop\\Python\\NA\\naguiv1'],
             binaries=[],
             datas=[('C:\\Users\\USERNAME\\Anaconda3\\Lib\\site-packages\\plotly\\', 'plotly'),
                ],
             hiddenimports=['pkg_resources.py2_warn', 'app.urls'],
             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='Tool v08122020',
          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='Analysis Tool v081320')

答案 2 :(得分:2)


PyInstaller似乎并没有完全支持这种情况 我使用了一个适用于我的解决方案。

  1. 请勿使用单个文件选项
  2. 将python安装目录的plotly包(对我来说是Lib \ site-packages \ plotly)完全复制到/ dist / {exe name} /目录

答案 3 :(得分:2)

您仍然可以使用one file选项,只需为pyinstaller创建一个.spec文件,并在数据中包含所需的plotly目录,如下所示:

...

datas=[('(...)/Python/Python36-32/Lib/site-packages/plotly/', './plotly/')],

...