Col*_*lin 4 python aws-lambda aws-lambda-layers
我只是想在我的 Python 3.8 Lambda 中使用 PIL。
我正在尝试以下步骤:
cd /mydir
git clone https://github.com/hidekuma/lambda-layers-for-python-runtime.git
cd lambda-layers-for-python-runtime
mkdir dist
docker-compose up --build
Run Code Online (Sandbox Code Playgroud)
aws lambda publish-layer-version --layer-name ImageStorageDependencies
--description "A Python 3.8 runtime with PIL and boto3 installed." --license-info "MIT" --zip-file fileb://output.zip --compatible-runtimes python3.7 python3.8 --region us-east-2
Run Code Online (Sandbox Code Playgroud)
然后我在 Lamda 配置中选择我的层,但是当我运行此代码时:
import json
import boto3
import io
from PIL import Image
def lambda_handler(event, context):
#etc
Run Code Online (Sandbox Code Playgroud)
...我收到错误:
[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': cannot import name '_imaging' from 'PIL'
Run Code Online (Sandbox Code Playgroud)
我到底哪里错了?!?
澄清一下,关于您上面的评论,Pillow 只是 PIL 的重新包装、更新版本,因为 PIL 的原始维护者很久以前就停止了工作。当您 pip install Pillow 时,您仍然将其导入为 PIL。在这种情况下,它们是同一回事。
要回答您的问题,枕头安装说明提到:
Pillow >= 2.1.0 不再支持
import _imaging. 请from PIL.Image import core as _imaging改用。
我不确定您的代码从何处导入_imaging,因此我认为您有几个选择:
_imaging并将其替换为更新的from PIL.Image import core as _imaging还有第四个选项,手动重定向进口,灵感来自这个问题。如果你不能做前三个中的一个,我只会这样做。把它放在你的代码中,在你执行破坏性的导入之前运行。您可能需要稍微调整一下以使其正常工作:
from PIL.Image import core as _imaging
import sys
sys.modules['PIL._imaging'] = _imaging
Run Code Online (Sandbox Code Playgroud)
稍后from PIL import _imaging现在应该真正导入新的核心。
更新:
更新 Pillow 也可以解决问题。在 7.2.0 中,我可以_imaging以旧方式导入:
>>> import PIL
>>> from PIL import _imaging
>>> print(PIL.__version__)
7.2.0
>>> print(_imaging)
<module 'PIL._imaging' from '...\\lib\\site-packages\\PIL\\_imaging.cp37-win_amd64.pyd'>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1540 次 |
| 最近记录: |