首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >捆绑在带有自定义AMI镜像的AWS Lambda上运行的pdflatex

捆绑在带有自定义AMI镜像的AWS Lambda上运行的pdflatex
EN

Stack Overflow用户
提问于 2017-07-17 04:35:19
回答 2查看 873关注 0票数 2

我的目标是创建一个Amazon Lambda函数,通过python使用pdflatex工具将.tex文件编译成.pdf。

我使用亚马逊的AMI构建了一个EC2实例,并使用yum安装了pdflatex:

yum install texlive-collection-latex.noarch

这样,我就可以使用.pdf,我的python代码就可以正常工作,以我想要的方式将我的.tex编译成pdflatex。

现在,我需要创建一个.zip文件包,其中包含pdflatex工具、latexcodec (我使用过的python库,这个库没有问题)和我的python文件: handler (lambda函数处理程序)和worker (它编译我的.tex文件)。

此捆绑包是将我的代码和库上传到Amazon Lambda所需的部署包。

问题是: pdflatex有很多依赖项,我必须把所有的东西都收集到一个地方。我已经找到了一个脚本,它可以为我做到这一点:

http://www.metashock.de/2012/11/export-binary-with-lib-dependencies/

我将PATH设置为在新目录中查找pdflatex二进制文件,这样我就可以使用它了,但我遇到了一个问题: pdflatex找不到一些依赖项。我可以通过将环境变量设置为脚本将所有内容移动到的文件夹来修复它:

代码语言:javascript
运行
复制
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/ec2-user/lambda/local/lib64:/home/ec2-user/lambda/local/usr/lib64"

在这一点上,我通过bash直接运行pdflatex。但是我的python脚本在尝试使用pdflatex时触发了一个错误:

代码语言:javascript
运行
复制
mktexfmt: No such file or directory
I can't find the format file `pdflatex.fmt'!

我还可以通过将pdflatex.fmttexmf.cnf文件移动到我的包文件夹中并设置一些环境变量来解决这个问题:

代码语言:javascript
运行
复制
export TEXFORMATS=/home/ec2-user/lambda/local/usr/bin

现在,我目前的问题是,python脚本一直抛出以下错误:

代码语言:javascript
运行
复制
---! /home/ec2-user/lambda/local/usr/bin/pdflatex.fmt doesn't match pdftex.pool
(Fatal format file error; I'm stymied)

我已经找到了一些可能的解决方案;删除一个.texmf-var文件夹,在我的例子中,这个文件夹并不存在;使用fmtutil,我的AMI镜像中没有这个文件夹...

1-我是否遗漏了任何环境变量?

2-或者以错误的方式移动我的pdflatex二进制文件和它的所有依赖项?

3-有没有正确的方法来移动二进制文件和它的所有依赖项,以便可以在其他机器上使用(考虑环境变量)?

EN

回答 2

Stack Overflow用户

发布于 2017-07-17 05:22:55

Lambda环境是一个容器,而不是一个普通的EC2实例。.zip中的所有文件都部署在容器内的/var/task/中。顺便说一句,除了目录/tmp之外,所有的内容都是只读的。因此,例如,运行yum是不可能的。

对于您的情况,我建议您将二进制文件放入压缩包中,并在/var/task/<binary name>中调用它。记住将静态编译的二进制文件放在与容器内核兼容的linux中。

票数 1
EN

Stack Overflow用户

发布于 2018-09-11 08:03:19

https://github.com/samoconnor/lambdalatex中,samoconnor所做的几乎就是您想要的。注意,他在他的处理程序function中设置了环境变量

代码语言:javascript
运行
复制
os.environ['PATH'] += ":/var/task/texlive/2017/bin/x86_64-linux/"
os.environ['HOME'] = "/tmp/latex/"
os.environ['PERL5LIB'] = "/var/task/texlive/2017/tlpkg/TeXLive/"

这可能对你也有好处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45133085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档