AWS Lambda 上的 Python Wand 和 ImageMagick

dee*_*itz 5 python imagemagick wand aws-lambda

尝试在 AWS Lambda 上运行 Wand 以进行一些简单的图像处理。

到目前为止,我已经:

  1. 创建了一个与 lambda 环境相同的实例
  2. 从源安装 imagemagick

    wget ImageMagick
    cd ImageMagick-...
    ./configure --prefix=/home/ec2-user/im --without-x
    make && make install
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将 MAGICK_HOME 设置为 /home/ec2-user/im/

  4. pip install wand

但是当我尝试导入 wand.image 时,我得到:

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
Run Code Online (Sandbox Code Playgroud)

当我做 a 时它工作正常yum install ImageMagick,但由于我想捆绑它,我想我需要包含二进制文件并将魔杖安装指向它。

有什么想法吗?

dee*_*itz 6

由于现在有人感兴趣,我解决了这个问题,目前管理我的 lambda 项目类似于下面。

文件夹结构

-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
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

lambda_function.py 现在可以导入魔杖

from wand.image import Image

print Image
Run Code Online (Sandbox Code Playgroud)