我的目标是创建一个Amazon Lambda函数,以通过python使用pdflatex工具将.tex文件编译为.pdf。
我使用亚马逊的AMI构建了一个EC2实例,并使用yum安装了pdflatex:yum install texlive-collection-latex.noarch
这样,我可以使用pdflatex和我的python代码工作,以所需的方式将.tex编译为.pdf。
现在,我需要创建一个包含pdflatex工具的.zip文件包; latexcodec(我使用过的python库,这个没问题);和我的python文件:处理程序(lambda函数处理程序)和工作程序(编译我的.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
文件移动到我的bundle文件夹并设置一些环境变量,我也能够解决此问题: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-是否有任何正确的方法来移动二进制文件及其所有依赖性,以便可以在其他计算机中使用(考虑env变量)?
最佳答案
Lambda环境是一个容器,而不是常见的EC2实例。 .zip中的所有文件都部署在容器内的/var/task/
中。顺便说一句,除目录/tmp
以外,所有内容都以只读方式安装。因此,例如,运行yum
是不可能的。
对于您的情况,我建议您将二进制文件放入zip并在/var/task/<binary name>
中调用它。请记住将静态编译的二进制文件放入与容器内核兼容的linux中。