适用于 GAE 的 Weasyprint Dockerfile

2023-12-26

我正在尝试在 gae 上安装 weasyprint,我知道我们可以通过将运行时从 python 更改为 app.yaml 中的自定义来将其传递到 Dockerfile 中来安装外部库。我在为 weasyprint 库创建 Dockerfile 时遇到问题。


这是一个简单的example我在下面写的these https://github.com/GoogleCloudPlatform/python-runtime#kubernetes-engine--other-docker-hosts指示。我已经测试过了,GAE 上的部署对我来说是成功的:

Dockerfile

FROM gcr.io/google-appengine/python

# Create a virtualenv for dependencies. This isolates these packages from
# system-level packages.
# Use -p python3 or -p python3.7 to select python version. Default is version 2.
RUN virtualenv /env -p python3.7

# Setting these environment variables are the same as running
# source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

# Install platform's packages required for WeasyPrint
RUN apt-get update && apt-get -y install build-essential python3-dev python3-pip \
python3-setuptools python3-wheel python3-cffi \
libcairo2 libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev shared-mime-info

# Copy the application's requirements.txt and run pip to install all
# dependencies into the virtualenv.
ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt

# Add the application source code.
ADD . /app

# Run a WSGI server to serve the application. gunicorn must be declared as
# a dependency in requirements.txt.
CMD gunicorn -b :$PORT main:app

app.yaml

runtime: custom
env: flex

要求.txt

gunicorn==19.1.1
Flask==1.0.2
WeasyPrint>=0.34

main.py

from flask import Flask
from weasyprint import *


app = Flask(__name__)


@app.route('/')
def hello():
    return 'Success!'


if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8080)

Note作为 WeasyPrint文档 https://weasyprint.readthedocs.io/en/stable/install.html提及、平台的软件包(例如 cairo、Pango 和 GDK-PixBuf)必须单独安装。它们是通过我在 Dockerfile 中添加的以下命令安装的:

RUN apt-get update && apt-get -y install build-essential python3-dev python3-pip python3-setuptools python3-wheel python3-cffi libcairo2 libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev shared-mime-info
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

适用于 GAE 的 Weasyprint Dockerfile 的相关文章

随机推荐

  • 如何在经典 ASP 中设置断点? (IIS7/VS2010)

    我有一个混合 ASP NET 经典 ASP 应用程序 我希望能够在 ASP 代码中设置断点 这可能吗 在Win7上使用VS2010 Ultimate运行IIS7 在 VBScript 中 Stop http msdn microsoft c
  • 使用 MPI 分散不同大小的矩阵块

    假设所有矩阵都按行优先顺序存储 说明该问题的一个示例是将 10x10 矩阵分布在 3x3 网格上 以便每个节点中的子矩阵的大小如下所示 3x3 3x3 3x4 3x3 3x3 3x4 4x3 4x3 4x4 我在 Stackoverflow
  • 改进单选按钮的使用以启用/禁用表单字段

    我有两个单选按钮和两个相应的表单字段 根据选择的单选按钮 一个表单字段将被禁用 而另一个表单字段将被启用 我的代码可以工作 但我认为它可以改进 现在我有两个独立的进程 检查页面加载时选择了哪个单选按钮并禁用相应的字段 另一个在页面加载后响应
  • 将下拉菜单与年份绑定

    我必须在 C 中绑定一个下拉框 其中包含从 2008 年到当前年份的年份 我怎样才能实现它 您可以使用以下命令构建整数序列System Linq Enumerable Range var startYear 2008 myDropDownL
  • Swift 3 - 如何提取正则表达式中捕获的组?

    我正在使用 Swift 3 并尝试访问捕获的组 let regexp ALREADY PAID NOT ALR PROVIDER MAY READY MAY BILL BILL YOU PAID n d d d check if some
  • 连接被拒绝 - connect(2) 用于“localhost”端口 25 Rails

    在培训期间 我正在开发一个网站 我们使用 Ruby on Rails 我们需要向用户发送邮件 所以我创建了一个邮件程序 我尝试过将 smtp 放在两者中development rb and environment rb config act
  • 如何在action类和jsp页面之间传递对象数据?

    我有一个名为 Code 的 Java 类 它具有与代码相关的所有值 例如codeId codeDescription等等及其 getter 和 setter 我正在成功检索一个操作类中的代码数据 我正在使用 struts 2 现在我想将这些
  • Go 中的 Unix FIFO?

    有没有办法用Go语言创建unix FIFO 没有Mkfifo nor Mknod in os包 尽管我预计命名的 FIFO 主要用于 posix 操作系统 事实上 有一个创建未命名的 FIFO 管道 的函数 但没有创建命名管道的函数 我是唯
  • 使用constraintEqualToAnchor()时设置自动布局约束后如何更改它们?

    我尝试使用以下命令设置具有自动布局约束的视图constraintEqualToAnchor override func viewDidLoad super viewDidLoad let myView UIView myView backg
  • 如果不存在则调用自由函数而不是方法

    假设您有一系列与类型无关的类 通过返回值的给定方法来实现共同概念 class A public int val const class B public int val const 假设您需要一个通用的自由函数T为未实现的任何类型返回常规值
  • 通过 ASPX 页面流式传输 PDF 数据

    我如何在我的网络服务器上流式传输 pdf 文件 并像谷歌文档一样在我自己的页面中显示它 该页面嵌入到页面中 None
  • swagger-codegen 客户端:如何在模型上包含 Jackson 注释

    我正在使用 swagger codegen 生成一个休息客户端 但遇到一个问题 我正在使用的服务返回一个具有继承的模型 API 模型如下所示 public class Person private List
  • Ansible 日期时间时区转换

    有没有办法在我的剧本中的 调试 语句中将ansible日期转换为不同的时区 我不想在剧本级别设置全球时区 我有这个 debug msg Y m d H M S strftime ansible date time epoch 这工作正常 但
  • 尝试的条件约束不是可索引操作

    我正在使用 DynamoDB 对于除 EQ 之外的所有 ComparisonOperators 的查询 API 它一直给出 尝试的条件约束不是可索引操作 错误 是什么原因 TableName My Table name IndexName
  • 使用 C# 程序为 Canon EOS Rebel XS 创建 USB 延时拍摄

    我想知道这是否可能 我想制作自己的软件来通过远程快门释放来控制快门的释放 从图中我看到它的电压为 3 3V 空载 阈值电压为 1 8V 我想知道如果我理解正确的话 我是否可以使用限制大约 5 25v 的 USB 电缆电压 这是否可能 或者我
  • R 根据前一行中的值删除行

    我是 R 新手 尝试根据前一行的值删除行 样本数据 Cust ID Date Value 500219 2016 04 11 12 00 00 0 500219 2016 04 12 16 00 00 0 500219 2016 04 14
  • /usr/bin/sudo 必须由 uid 0 拥有并设置了 setuid 位版本 .ubantu14.04 LTS

    当我为 npm 设置 EACCESS 并在终端中运行 chown 命令以更改所有者权限时 但现在我陷入了困境 sudo usr bin sudo 必须由 uid 0 拥有并设置了 setuid 位 我的版本是 ubuntu14 04 LTS
  • 将查询的所有结果放入 Prolog 中的列表中

    我想知道如何创建一个谓词 将从某个查询中获得的所有结果 因此我得到一个结果并按分号 直到得到 False 放入列表中 例如 如果我写foo X 1 2 3 在一些 Prolog 监听器中 假设结果是 X 11 X 22 False 我想将所
  • 覆盖css文件中的定义

    我有一个 css 文件 它定义了所有样式 tags 像这样 p 我怎样才能写一个在包含具有默认样式的样式表的页面中 没有简单的方法可以做到这一点 不过 有一些常见的技巧可以模拟这种行为 最好使用的方法取决于被覆盖区域的复杂程度以及您想要执行
  • 适用于 GAE 的 Weasyprint Dockerfile

    我正在尝试在 gae 上安装 weasyprint 我知道我们可以通过将运行时从 python 更改为 app yaml 中的自定义来将其传递到 Dockerfile 中来安装外部库 我在为 weasyprint 库创建 Dockerfil