我的目标是创建一个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找不到一些依赖项。我可以通过将环境变量设置为脚本将所有内容移动到的文件夹来修复它:
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/ec2-user/lambda/local/lib64:/home/ec2-user/lambda/local/usr/lib64"在这一点上,我通过bash直接运行pdflatex。但是我的python脚本在尝试使用pdflatex时触发了一个错误:
mktexfmt: No such file or directory
I can't find the format file `pdflatex.fmt'!我还可以通过将pdflatex.fmt和texmf.cnf文件移动到我的包文件夹中并设置一些环境变量来解决这个问题:
export TEXFORMATS=/home/ec2-user/lambda/local/usr/bin现在,我目前的问题是,python脚本一直抛出以下错误:
---! /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-有没有正确的方法来移动二进制文件和它的所有依赖项,以便可以在其他机器上使用(考虑环境变量)?
发布于 2017-07-17 05:22:55
Lambda环境是一个容器,而不是一个普通的EC2实例。.zip中的所有文件都部署在容器内的/var/task/中。顺便说一句,除了目录/tmp之外,所有的内容都是只读的。因此,例如,运行yum是不可能的。
对于您的情况,我建议您将二进制文件放入压缩包中,并在/var/task/<binary name>中调用它。记住将静态编译的二进制文件放在与容器内核兼容的linux中。
https://stackoverflow.com/questions/45133085
复制相似问题