&引用;解码器jpeg不可用“;在弹性豆茎上搭配Django

&引用;解码器jpeg不可用“;在弹性豆茎上搭配Django,django,image,jpeg,amazon-elastic-beanstalk,django-file-upload,Django,Image,Jpeg,Amazon Elastic Beanstalk,Django File Upload,我正在弹性豆茎上开发Django后端系统 上载JPEG图像文件时,出现错误解码器JPEG不可用。上载.png图像文件不会导致任何问题 后端环境: AWS beanstalk:64位Amazon Linux 2014.03 v1.0.4运行Python 2.7 python:2.7 pip包列表 Django==1.6.5 降价==2.4.1 MySQL python==1.2.5 枕头==2.5.3 boto==2.30.0 django过滤器==0.7 django存储==1.1.8 dja

我正在弹性豆茎上开发Django后端系统

上载JPEG图像文件时,出现错误
解码器JPEG不可用
。上载.png图像文件不会导致任何问题

后端环境:

  • AWS beanstalk:64位Amazon Linux 2014.03 v1.0.4运行Python 2.7
  • python:2.7
  • pip包列表 Django==1.6.5 降价==2.4.1 MySQL python==1.2.5 枕头==2.5.3 boto==2.30.0 django过滤器==0.7 django存储==1.1.8 djangorestframework==2.3.14 wsgiref==0.1.2
导致错误的源代码:

查看

normalImage = NormalImage(image=image, userProfile=request.user.profile, category = category)
normalImage.save()
型号

class NormalImage(models.Model):
    userProfile = models.ForeignKey(UserProfile)
    height = models.PositiveIntegerField(editable=False)
    width = models.PositiveIntegerField(editable=False)
    image = models.ImageField(upload_to=rename_image_file, width_field='width', height_field='height')
    size = models.TextField()
    price = models.PositiveIntegerField()
    tags = models.ManyToManyField(Tag)
    category = models.ForeignKey(Category)
    created_datetime = models.DateTimeField(auto_now_add=True)

def __init__(self, *args, **kwargs):
    super(NormalImage,self).__init__(*args, **kwargs)
    if not self.id:
        self.size = Size.determineSizeDescription(anWidth=self.width, aHeight=self.height)
        self.price = Size.determinePrice(anWidth=self.width, aHeight=self.height)

def get_created_datetime_str(self):
    return self.created_datetime.strftime('%Y-%m-%d %H:%M:%S')

def get_image_url(self):
    return 'http://photocoapi-env-x2ezvferc7.elasticbeanstalk.com/images/' + str(self.id) + '/'
错误代码:

IOAT/me/请求错误/ 解码器jpeg不可用请求方法:获取请求URL:
德扬戈 版本: 1.6.5异常类型:IOError异常值:解码器jpeg不可用异常位置: /opt/python/run/venv/lib/python2.7/site-packages/PIL/Image.py-in _getdecoder,第413行Python可执行文件:/opt/Python/run/venv/bin/Python版本: 2.7.5 Python路径:['/opt/Python/run/venv/lib/python2.7/site packages', “/opt/python/current/app”、“/opt/python/bundle/4/app”, “/opt/python/run/baselinenv/lib64/python27.zip”, “/opt/python/run/baselinenv/lib64/python2.7”, “/opt/python/run/baselinenv/lib64/python2.7/plat-linux2”, “/opt/python/run/baselinenv/lib64/python2.7/lib tk”, “/opt/python/run/baselinenv/lib64/python2.7/lib old”, “/opt/python/run/baselinenv/lib64/python2.7/lib dynload”, “/usr/lib64/python2.7”、“/usr/lib/python2.7”, '/opt/python/run/baselinenv/lib/python2.7/site packages']

我试图解决的问题是:

  • 我通过SSH连接到beanstalk服务器,并使用yum或up2date安装在库下面
  • yum:libjpeg-devel、zlib-devel、freetype-devel

    • 然后进行符号链接

      $sudo ln-s/usr/lib64/libjpeg.so/usr/lib $sudo ln-s/usr/lib64/zlib.so/usr/lib $sudo ln-s/usr/lib64/freetype.so/usr/lib


在安装pip(用于解码图像的python库)枕头之前,必须安装支持JPEG图像的依赖项

因此,您应该尝试:

  • 卸载枕头

    pip卸载枕

  • 安装jpeg库

    yum安装libjpeg-devel

  • 重新安装枕头

    pip安装枕


您可以在应用程序源中包含一个名为“requirements.txt”的文件,其中包含所有必需的依赖项,AWS Elastic Beanstalk将为您安装这些依赖项

您可以使用ebextensions安装yum软件包。在应用程序源代码中创建一个名为
.ebextensions/01 yum.config
的文件,并将以下内容放入其中

packages: 
  yum:
    libjpeg-devel: [] 
    <another-package>: []
软件包:
百胜:
libjpeg-devel:[]

下面是一个关于将requirements.txt与Elastic Beanstalk一起使用的教程


yum未能找到libjpeg-devel。但这对我起了作用:

packages: 
  yum:
    libjpeg-turbo-devel: []
希望这对某人有所帮助。

干杯

首先,谢谢你的回答。事实上我做了好几次。我试着卸下枕头并再次安装libjpeg/枕头,但结果是一样的。所以,我在这里写了一个问题,我是否遗漏了AWS beanstalk的一些属性。例如,与其他Linux系统相比,我现在使用的Amazon Linux通常不支持这些包。对不起,我对AWS beanstalk没有任何经验。您是否安装了“python-devel”yum软件包?您还可以尝试编辑setup.cfg以指定jpeg库位置,并手动运行“python setup.py install”以安装Pillow(如本文所述)。我也有同样的问题,添加ebextension无法解决。在我的日志中显示,yum已安装libjpeg:Sep 30 19:00:27更新:libjpeg-turbo-1.2.1-3.3.amzn1.x86_64 Sep 30 19:00:27已安装:libjpeg-turbo-devel-1.2.1-3.3.amzn1.x86_64