无法与pyinstaller一起使用pyexcel-xls。 python可执行文件不工作。 python版本3.4.4

时间:2017-03-23 17:56:15

标签: python windows executable pyinstaller xls

程序在使用时运行:

Python filename.py

但是当我使用" pyinstaller"创建可执行文件时

pyinstaller -F filename.py

成功创建了可执行文件,但脚本执行失败并抛出了以下错误。

Traceback (most recent call last):
  File "site-packages\pyexcel_io\manager.py", line 160, in create_reader
  File "site-packages\pyexcel_io\manager.py", line 222, in _get_a_handler
pyexcel_io.manager.NoSupportingPluginFound: No suitable library found for xls

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "script.py", line 8, in <module>
  File "site-packages\pyexcel_xls\__init__.py", line 29, in get_data
  File "site-packages\pyexcel_io\io.py", line 36, in get_data
  File "site-packages\pyexcel_io\io.py", line 126, in load_data
  File "site-packages\pyexcel_io\manager.py", line 171, in create_reader
pyexcel_io.manager.SupportingPluginAvailableButNotInstalled: Please install pyexcel-xls
Failed to execute script script

相应的python脚本是:

from pyexcel_xls import save_data , get_data
data = get_data("registered-market-makers-by-security.xls")
save_data("file_to_consume.xls", data)

如何避免此错误并创建功能正常的.exe文件?

我的客户端有Windows环境。

我也尝试了py2exe,但它与我的机器中的windows dll有一些冲突。

2 个答案:

答案 0 :(得分:4)

问题

pyexcel-io使用一种方法来包含pyinstaller不支持的插件。请参阅此issue

解决方法

解决这个问题的方法有两个方面。

pyexcel所需的更改

我已经提交了Change Request,其中显示了如何修改pyexcel以允许它与pyinstaller一起使用。基本上,pyexcel-io需要知道如何找到冻结的模块。

如果pyexcel家伙拿到变更请求,那么这将让你前进。但是,如果他们没有,或者您匆忙,那么将the changed file从更改请求复制到您的网站包目录pyexcel_io/__init__.py将使pyexcel正常工作。

但是,pyinstaller还需要知道要包含的内容。

pyinstaller还需要知道包含所需的模块。所以在pyinstaller命令行上你还需要做:

--hidden-import pyexcel_xls.xls

<强>更新

此修补程序的更改请求已为{pyexcel的merged into master branch

更新#2:

修正releasedpypi

答案 1 :(得分:0)

我使用 py2exe 代替pyinstaller遇到了同样的问题。 在对我的代码和一些谷歌搜索进行一些研究后,我最终在这个帖子中发现问题是类似的,解决方案也是如此。 如果这对其他人有任何帮助,为了使用py2exe使用pyexcel库生成可执行文件,我在包含'pyexcel_xls.xls'中添加了'pyexcel_xlsx.xlsx'section在py2exe安装选项中。所以:

setup(
    name='Hello'
    version='0.1'
    description='Hello program'
    author='Me'
    options={
            'compressed': 1
            'optimized': 1
            'includes': ['pyexcel_xls.xls', 'pyexcel_xlsx.xlsx' ...]
        }
    console=['hello.py']
)