0

我最近使用 pdfkit 创建了一个应用程序,它接受用户输入的关键字并使用该关键字进行各种互联网搜索。然后它使用 pdfkit 生成每个单独搜索的 pdf 文件并将它们保存到用户定义的目录中。

当我从终端运行代码时,一切正常,但是当我尝试使用 py2app 冻结脚本时,一切正常,直到实际保存 pdf 文件,在此应用程序完全不执行任何操作。

我尝试在 py2app 用于创建应用程序的 setup.py 文件中包含 pdfkit 和 wkhtmltopdf,但不幸的是,我尝试将它们列在包含部分下,如下所示:

'includes':['requests','pdfkit']

在包部分:

'packages':['requests','pdfkit']

甚至在下面的 setup_requires 部分:

setup_requires=['py2app', 'wkhtmltopdf']

但是应用程序仍然什么都不做。我认为这与依赖项不会转移到冻结的应用程序这一事实有关。但是,我开始重新考虑这一点,因为即使我在别名模式下创建应用程序(声称保留所有依赖项),也会出现同样的问题。

这是一个已知的问题?或者有没有人找到解决这个问题的方法。

非常感谢。我的完整 setup.py 文件如下:

    from setuptools import setup

APP = ['pdtest.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': False, 'includes':['requests','pdfkit'],'packages':['requests','pdfkit'], 'iconfile':'icon.icns'}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app', 'wkhtmltopdf'],
)
4

1 回答 1

0

好的,找到了答案,因此遇到相同问题的任何人都可以使用它。

基本上问题在于 pdfkit 只是模块 WKHTMLTOPDF 的包装器。

所以基本上,当您调用 PDFKIT 时,它只是要求 WKHTMLTOPDF 为它完成工作,但是在我的系统上,由于某种原因,该脚本在从终端运行时能够找到 WKHTMLTOPDF 模块,但是无法使用 py2app 转换为小程序。

我需要做的是告诉脚本 WKHTMLTOPDF 的确切位置,但首先你需要自己知道这些信息,只需在终端中输入:

which wkhtmltopdf

你应该得到一个返回的路径。如果您不这样做,那么也许您应该考虑先安装它,这通常会有所帮助。

然后您需要设置配置文件以在该位置查找 wkhtmltopdf 模块,因此只需将其添加到您的 pdfkit 脚本中:

config = pdfkit.configuration(wkhtmltopdf='/usr/local/bin/wkhtmltopdf')

除了将“=”后面的路径替换为之前哪个命令返回的路径。然后,每次调用 pdfkit 时,都需要添加此配置,例如:

normalpdf = pdfkit.from_url('URL, 'test.pdf',configuration = config)

这应该可以解决问题。希望能帮助到你!

于 2016-09-23T17:06:05.897 回答