Python 3 flask在heroku上安装wkhtmltopfd

2024-09-29 19:31:00 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的heroku python应用程序(flask)上安装wkhtmltopdf二进制文件时遇到了一个问题。在

一年前(Python2)我已经遇到了一个问题,但是我能够解决这个问题,方法是首先将wkhtmltopdf-pack添加到需求中,并将其安装在heroku上,然后将config var设置为WKHTMLTOPDF_BINARY=wkhtmltopdf-pack。这是我以前的thread

现在的问题:

我试图对python3使用相同的方法,但是wkhtmltoppdf包的版本都不起作用,每次推送都会被拒绝,我无法安装它。在

我在需求中尝试了这些版本:

wkhtmltopdf-pack==0.12.5

wkhtmltopdf-pack==0.12.4

wkhtmltopdf-pack==0.12.3

wkhtmltopdf-pack==0.12.3.0.post1

wkhtmltopdf-pack==0.12.2.4

我得到这些错误:

^{pr2}$

或者

error: can't copy 'bin/wkhtmltopdf-pack': doesn't exist or not a regular file

我记得有一次它告诉我有一个SyntaxError,它不能解码什么东西。在

替代方法:

似乎也可以使用buildpack,所以我尝试添加buildpack:

heroku buildpacks:add https://github.com/dscout/wkhtmltopdf-buildpack.git

我看到buildpack已经添加,但是没有安装,wkhtmltopdf也没有配置变量。我不知道如何触发安装,在所有的buildpacks文档中都写着“添加buildpack,你就可以开始了”。在

尝试创建PDF时,此处出现服务器错误:

OSError: No wkhtmltopdf executable found: "b''"

编辑:

我成功安装了buildpack:

enter image description here

推送是成功的,但是没有创建配置变量,我也不知道二进制文件的路径是什么。在

编辑

我可以通过heroku bash找到文件:

app bin dev etc lib64丢失+找到proc sbin sys tmp usr var

/ $ cd app
~ $ cd vendor
~/vendor $ dir
wkhtmltox
~/vendor $ cd wkhtmltox
~/vendor/wkhtmltox $ dir
lib
~/vendor/wkhtmltox $ cd lib
~/vendor/wkhtmltox/lib $ dir
libwkhtmltox.so  libwkhtmltox.so.0  libwkhtmltox.so.0.12  libwkhtmltox.so.0.12.3
~/vendor/wkhtmltox/lib $ exit

现在我尝试了所有这些文件,但都给出了一个错误:

OSError: wkhtmltopdf exited with non-zero code -11. error

下面是我如何设置路径:

# WKHTMLTOPDF config
if 'DYNO' in os.environ:
    print ('loading wkhtmltopdf path on heroku')
    MYDIR = os.path.dirname(__file__)    
    WKHTMLTOPDF_CMD = os.path.join(MYDIR + "/vendor/wkhtmltox/lib/", "libwkhtmltox.so")
else:
    print ('loading wkhtmltopdf path on localhost')
    MYDIR = os.path.dirname(__file__)    
    WKHTMLTOPDF_CMD = os.path.join(MYDIR + "/static/executables/bin/", "wkhtmltopdf.exe")

Tags: 文件path方法herokuoslibcdpack
2条回答

按照我的第一种方法,我自己解决了这个问题。在

我在pypi上发现了另一个wkhtmltopdf-pack,并将其添加到我的requirements.txt

wkhtmltopdf-pack-ng==0.12.3.0

Heroku能够安装这个包。在

之后,我为wkhtmltopdf添加了配置变量:

^{pr2}$

安装现已完成。我现在需要在我的应用程序上使用正确的路径:

if 'DYNO' in os.environ:
    print ('loading wkhtmltopdf path on heroku')
    WKHTMLTOPDF_CMD = subprocess.Popen(
        ['which', os.environ.get('WKHTMLTOPDF_BINARY', 'wkhtmltopdf-pack')], # Note we default to 'wkhtmltopdf' as the binary name
        stdout=subprocess.PIPE).communicate()[0].strip()
else:
    print ('loading wkhtmltopdf path on localhost')
    MYDIR = os.path.dirname(__file__)    
    WKHTMLTOPDF_CMD = os.path.join(MYDIR + "/static/executables/bin/", "wkhtmltopdf.exe")

就这样。在

在Heroku上安装wkhtmltopfd的最佳方法是获取python3的wkhtmltoppdf二进制文件,而不是wkhtmltoppdf包,您可以使用pydf来实现这一点。在

您可以简单地使用pip进行安装,如:

pip install python-pdf

或者对于Python 2:

^{pr2}$

与基于buildpack的方法不同,pydf安装时包含wkhtmltopf二进制文件,使用起来非常容易,这是Heroku的正确方法。在

但是如果您仍然想坚持使用build-pack wkhtmltopdf,下面是另一个解决方案,您可以尝试一下:

通过:CLI安装

$ heroku create  buildpack https://github.com/homelight/wkhtmltox-buildpack.git

或手动:

将以下行添加到.buildpacks文件中

https://github.com/homelight/wkhtmltox-buildpack.git

请注意,此buildpack仅与cedar-14堆栈兼容。你可以用heroku堆叠:设置雪松-14设置正确的堆栈。在

相关问题 更多 >

    热门问题