Python Wand и ImageMagick на AWS Lambda
Попытка запустить Wand на AWS Lambda для некоторых простых манипуляций с изображениями.
До сих пор я:
- создал экземпляр, идентичный лямбда-среде
Установлен imagemagick из исходного кода
wget ImageMagick
cd ImageMagick-...
./configure --prefix=/home/ec2-user/im --without-x
make && make install
Установить MAGICK_HOME в
/home/ec2-user/im/pip install wand
Но когда я пытаюсь импортировать палочку.изображение, которое я получаю:
import wand.image
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/ec2-user/cv/local/lib64/python2.7/site-packages/wand/image.py", line 20, in <module>
from .api import MagickPixelPacket, libc, libmagick, library
File "/home/ec2-user/cv/local/lib64/python2.7/site-packages/wand/api.py", line 206, in <module>
'Try to install:n ' + msg)
ImportError: MagickWand shared library not found.
You probably had not installed ImageMagick library.
Try to install:
http://docs.wand-py.org/en/latest/guide/install.html
Это прекрасно работает, когда я делаю yum install ImageMagick, но так как я хочу связать его, я подумал, что мне нужно будет включить двоичный и направьте на него установку палочки.
Какие-нибудь мысли?
2 ответов:
Поскольку теперь кто-то еще заинтересован, я решил эту проблему и в настоящее время управляю своими лямбда-проектами, аналогичными приведенным ниже.
Структура папок
-project -init_libs.py -lambda_function.py -libs -libMagickWand-6.Q16.so -libMagickCore-6.Q16.so -libMagick++-6.Q16.so -site-packages -wand -other_modules
init_libs.pyзагружает собственные библиотеки, такие как Wand.import sys import os from ctypes import cdll from os.path import join # manually load libraries and set paths so native libraries can be used. exec_dir = os.getcwd() sys.path.append(join(exec_dir, 'site-packages')) # required for Wand os.environ['MAGICK_HOME'] = exec_dir lib_dir = join(exec_dir, 'lib') # add lib to sys path for general loading sys.path.append(lib_dir)
lambda_function.pyТеперь можно импортировать палочкуfrom wand.image import Image print Image
Это может быть не очень полезно для заданного вопроса, но если желаемой целью является простое преобразование файлов (pdf в jpg/png и т. д.) можно обойти wand и вызвать ImageMagick / GhostScript напрямую (они упакованы в среду Python3.6 AWS).
Например
# converts local pdf to jpg using ImageMagick os.system("convert -density 200x200 /tmp/in_pdf.pdf /tmp/out_jpg.jpg") # converts local pdf to jpg using GhostScript os.system( "gs -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT " "-dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 " "-sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r150 " "-sOutputFile=/tmp/out_jpg-%d.jpg /tmp/in_pdf.pdf" )Причина, по которой я использую
/tmpв качестве расположения файла, заключается в том, что lambda позволяет хранить файлы размером до 500 МБ во время выполнения функции lambda.Надеюсь, это кому-то поможет!
Comments