我最近使用pdfkit创建了一个应用程序,该应用程序接收用户输入的关键字并使用该关键字进行各种互联网搜索。然后,它使用pdfkit生成每个单独搜索的pdf文件,并将它们保存到用户定义的目录中。
当我从终端运行代码时,一切都工作正常,但是当我尝试使用py2app冻结脚本时,一切都运行正常,直到实际保存pdf,应用程序完全没有做任何事情。
我试图在setup.py文件中包含pdfkit和wkhtmltopdf,py2app用它来创建应用程序,但是为了没有运气,我尝试在include部分列出它们:
'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'],
)
答案 0 :(得分:0)
好的找到答案,所以遇到同样问题的人都可以使用它。
基本上问题在于pdfkit只是模块WKHTMLTOPDF的包装器。
所以基本上当你调用PDFKIT时发生的事情就是它只是要求WKHTMLTOPDF为它做的工作,但是由于某种原因,我的系统上的脚本能够在从终端运行时找到WKHTMLTOPDF模块,但在使用py2app转换为applet时无法使用。
我需要做的是告诉脚本WKHTMLTOPDF的确切位置,但首先你需要自己知道这些信息,只需输入终端:
which wkhtmltopdf
你应该得到一个返回的路径。如果你不这样做,那么你应该考虑先安装它,这通常会有所帮助。
然后你需要设置配置文件以查找wkhtmltopdf模块的那个位置,所以只需将它添加到你的pdfkit脚本中:
config = pdfkit.configuration(wkhtmltopdf='/usr/local/bin/wkhtmltopdf')
除了替换" ='之后的路径使用前面哪个命令返回的路径。然后,每次调用pdfkit时,都需要添加此配置,例如:
normalpdf = pdfkit.from_url('URL, 'test.pdf',configuration = config)
这应该可以解决问题。希望它有所帮助!