2017-07-16 30 views
0

我的目标是创建一个Amazon Lambda函数,通过python使用pdflatex工具将.tex文件编译为.pdf。捆绑pdflatex以在具有自定义AMI映像的AWS Lambda上运行

我已经建立了使用Amazon的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/

我已经把我的路径来寻找在新目录中pdflatex二进制这样我就可以使用它,我有一个问题:pdflatex couldn”找到一些依赖关系。我能够通过一个环境变量设置为文件夹来修复它在脚本感动一切:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/ec2-user/lambda/local/lib64:/home/ec2-user/lambda/local/usr/lib64" 

在这一点上,我是直接运行pdflatex,通过庆典。

mktexfmt: No such file or directory 
I can't find the format file `pdflatex.fmt'! 

我也能够通过pdflatex.fmttexmf.cnf文件移动到我的包文件夹,并设置一些环境变量,以及对解决这个问题::

但试图使用pdflatex当我的Python脚本触发一个错误
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变量)?

回答

0

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

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

+0

我知道,我使用这个实例,因为它与lambda函数使用的基础结构相同。所以它不会有任何兼容性问题。但在将所有内容放入zip文件之前,我必须确保我的python处理程序可以使用来自一个地方的所有内容(int,本例中为/ home/ec2-user/lambda/local),然后我将它更改为'var /任务/ '压缩一切。 当然,一切都是只读的,我使用yum来设置pdflatex,这样我就可以将它捆绑到我的部署包中 –

相关问题