Python 捆绑pdflatex以在带有自定义AMI映像的AWS Lambda上运行

Python 捆绑pdflatex以在带有自定义AMI映像的AWS Lambda上运行,python,lambda,pdflatex,Python,Lambda,Pdflatex,我的目标是创建一个AmazonLambda函数,通过python使用pdflatex工具将.tex文件编译成.pdf 我使用Amazon的AMI构建了一个EC2实例,并使用yum安装了pdflatex: yum安装texlive collection latex.noarch 这样,我就可以使用pdflatex和我的python代码,以我想要的方式将我的.tex编译成.pdf 现在,我需要创建一个包含pdflatex工具的.zip文件包;latexcodec(我使用过的python库,这个库没有

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

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

yum安装texlive collection latex.noarch

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

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

此捆绑包是将我的代码和库上载到AmazonLambda所需的部署包

问题是:pdflatex有很多依赖项,我必须在一个地方收集所有信息。我找到了一个脚本,可以帮我做到这一点:

我已经设置了在新目录中查找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-是否有任何正确的方法移动二进制文件及其所有依赖项,以便在其他机器中使用(考虑到环境变量)?

Lambda环境是一个容器,而不是常见的EC2实例。.zip中的所有文件都部署在容器内的
/var/task/
中。顺便说一下,除了目录
/tmp
之外,所有内容都以只读方式装载。例如,不可能运行
yum


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

samoconnor正在做您想要的事情。注意,他在处理程序中设置了环境变量


这可能对您也有好处。

我知道,我正在使用这个实例,因为它与lambda函数使用的基础结构相同。所以它不会有任何兼容性问题。但在将所有内容放入zip文件之前,我必须确保我的python处理程序可以从一个位置使用所有内容(在本例中为my/home/ec2 user/lambda/local),然后我将其更改为
var/task/
,以将其全部压缩。当然,所有内容都是只读的,我正在使用yum设置pdflatex,以便将其捆绑到部署包中
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/"