Cx_Freeze和Plotly

时间:2016-04-21 10:27:16

标签: python py2exe cx-freeze plotly pkg-resources

我正在尝试使用cx_freeze构建一个使用plotly的应用程序的exe。

我之前使用matplotlib构建了应用程序,但已将图形切换为plotly。

我可以构建应用程序但是当我尝试绘图时,我收到以下错误。

 url = py.plot(fig, filename='pandas-box-plot')

  File "C:\Python34\lib\site-packages\plotly\offline\offline.py", line 284, in p
lot
    get_plotlyjs(),
  File "C:\Python34\lib\site-packages\plotly\offline\offline.py", line 48, in ge
t_plotlyjs
    plotlyjs = resource_string('plotly', path).decode('utf-8')
  File "C:\Python34\lib\site-packages\pkg_resources\__init__.py", line 1184, in
resource_string
    self, resource_name
  File "C:\Python34\lib\site-packages\pkg_resources\__init__.py", line 1457, in
get_resource_string
    return self._get(self._fn(self.module_path, resource_name))
  File "C:\Python34\lib\site-packages\pkg_resources\__init__.py", line 1535, in
_get
    return self.loader.get_data(path)
OSError: [Errno 0] Error: 'plotly\\offline\\plotly.min.js'

我尝试在setup.py文件中包含pkg_resources,并且还在PATH_to_exe \ offline \ plotly.min.js中包含了plotly.min.js.

据我所知,pkg_resources有问题吗?

编辑:似乎pkg_resources正在查找library.zip文件中的文件,但它包含在library.zip之外的路径中。我似乎找不到将文件添加到setup.py

中的library.zip文件的方法

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

好的,我明白了。您可以在setup.py中包含这些文件。首先创建要包含的文件列表,就像在普通包含中一样。 python_dir是包含文件的python目录的路径。

zip_includes = [('%s\Lib\site-packages\plotly\offline\plotly.min.js' % str(python_dir), 'plotly\offline\plotly.min.js'),
                ('%s\Lib\site-packages\plotly\widgets\graphWidget.js' % str(python_dir), 'plotly\widgets\graphWidget.js'),
                ('%s\Lib\site-packages\plotly\graph_reference\default-schema.json' % str(python_dir), 'plotly\graph_reference\default-schema.json')]

然后在你的设置中:

setup(name="Orion",
      version="1,
      author="Jonathan",
      description="Metering analysis tool",
      options={'build_exe': {'excludes': excludes, 'packages': packages, 'include_files': include_files, 'build_exe': "%s/build" % BASE_PATH, 'zip_includes': zip_includes}},
      executables=[compileTarget]
      )

这将包括library.zip中的文件,并且不包括它们,就像要包含的典型外部文件一样。