我在AWS Elastic Beanstalk下在Python上处理jpeg文件时遇到了一些麻烦。

我在.ebextensions/python.config文件上有此文件:

packages:
 yum:
  libjpeg-turbo-devel: []
  libpng-devel: []
  freetype-devel: []
...

所以我相信我已经安装了libjpeg并且可以正常工作(我尝试了libjpeg-devel,但是您找不到该软件包)。

另外,我在我的requirements.txt文件中有此内容:
Pillow==2.5.1
...

所以我相信我已经安装了Pillow并在我的环境中工作。

然后,由于我拥有Pillow和libjpeg,因此我尝试在Python脚本中使用PIL.Image进行一些工作并将其保存到文件中。像这样:
from PIL import Image

def resize_image(image,new_size,crop=False,correctOrientationSize=False):
  assert type(new_size) == dict
  assert new_size.has_key('width') and new_size.has_key('height')

  THUM_SIZE = [new_size['width'],new_size['height']]

  file_like = cStringIO.StringIO(base64.decodestring(image))
  thumbnail = Image.open(file_like)

  (width,height) = thumbnail.size
  if correctOrientationSize and height > width:
    THUM_SIZE.reverse()

  thumbnail.thumbnail(THUM_SIZE)

  if crop:
    # Recorta imagem
    thumbnail = crop_image(thumbnail)
  output = cStringIO.StringIO()
  thumbnail.save(output,format='jpeg')

return output.getvalue().encode('base64')

但是,当我尝试在Elastic Beanstalk的实例上运行它时,在调用.save()方法时出现异常“decoder jpeg not available”。

如果我通过SSH进入我的实例,则可以正常工作,并且我已经尝试过重建环境。

我究竟做错了什么?

更新:

如建议的那样,我再次通过SSH进入实例并通过pip(/opt/python/run/venv/bin/pip)重新安装了Pillow,而不是在确定libjpeg-devel在Pillow之前已经在环境中之前。

我运行了selftest.py,它确认我支持jpeg。因此,在最后一次尝试中,我去了Elastic Beanstalk界面上的“重启应用服务器”。有效。

谢谢你们。

最佳答案

遵循here的一般建议,我通过在.ebextensions配置中添加以下内容并重新部署来解决此问题。

packages:
  yum:
    libjpeg-turbo-devel: []
    libpng-devel: []
    freetype-devel: []

container_commands:
...
  05_uninstall_pil:
    command: "source /opt/python/run/venv/bin/activate && yes | pip uninstall Pillow"

  06_reinstall_pil:
    command: "source /opt/python/run/venv/bin/activate && yes | pip install Pillow --no-cache-dir"

关于python - 在AWS Elastic Beanstalk上使用Pillow的"decoder jpeg not available",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25043982/

10-13 07:22