You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS Lambda中调用gdal2tiles.py提示command not found如何解决

报错根因

你遇到的sh: gdal2tiles.py: command not found错误,本质是AWS Lambda运行环境的系统PATH路径没有包含GeoLambda层中gdal2tiles.py脚本的存放目录,系统无法定位到该可执行脚本。
Lambda的所有自定义层都会默认挂载到/opt目录下,GDAL相关的工具脚本通常会放在/opt/bin或者/opt/python/bin路径下。

解决步骤
  • 第一步:先定位gdal2tiles.py的实际存放路径,在Lambda中临时运行如下代码,从日志中获取完整路径:
import json
import os
from osgeo import gdal

def lambda_handler(event, context):
    # 搜索全opt目录下的gdal2tiles.py
    os.system("find /opt -name 'gdal2tiles.py'")
  • 第二步:使用绝对路径直接调用脚本,假设你查到的路径是/opt/bin/gdal2tiles.py,修改你的业务代码即可:
import json
import os
from osgeo import gdal
def lambda_handler(event, context):
    # 直接用完整绝对路径调用,同时修正你原代码的参数错误
    os.system("/opt/bin/gdal2tiles.py -p mercator -z 0-6 test.jpg /tmp/tiles_output")
  • 如果你不想每次都写绝对路径,也可以提前把脚本所在目录加到系统PATH中:
import json
import os
from osgeo import gdal
def lambda_handler(event, context):
    # 把gdal2tiles.py所在目录加到PATH,示例路径请替换为你实际查到的路径
    os.environ['PATH'] = f"/opt/bin:{os.environ['PATH']}"
    os.system("gdal2tiles.py -p mercator -z 0-6 test.jpg /tmp/tiles_output")
额外注意事项
  • 你原代码中的参数存在两处语法错误:-p参数后必须指定投影类型(常用的是mercator/webmercator),-z参数后的缩放范围不需要加中括号,直接写0-6即可
  • gdal2tiles.py默认会在当前工作目录生成切片文件,Lambda仅允许在/tmp目录下写入文件,你需要在调用时指定输出目录到/tmp下,避免写入权限报错
  • 如果直接调用脚本失败,可以尝试指定python3来执行,避免脚本头部的shebang指向的python版本在Lambda环境中不存在
  • 如果你是自行打包的GeoLambda层,需要确认gdal2tiles.py的权限为755,官方预构建的GeoLambda层一般已经做好了权限配置

内容的提问来源于stack exchange,提问作者Philiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:54:05