要解决这个问题,需要将Gurobi库文件一起打包在Lambda函数的deployment package中,以便Lambda函数可以找到并加载Gurobi库。以下是一个示例Python函数,在函数发生Gurobi导入错误时,将Gurobi库文件打包到部署包中:
import os
import shutil
import subprocess
def lambda_handler(event, context):
try:
import gurobipy
# 正常情况下运行代码
except ImportError:
# 如果发生DLL找不到的错误,则打包Gurobi库文件并重新导入
subprocess.call('wget https://s3.amazonaws.com/gurobi/bin/gurobi9.0.2_linux64.tar.gz', shell=True)
subprocess.call('tar xzvf gurobi9.0.2_linux64.tar.gz', shell=True)
os.environ['LD_LIBRARY_PATH'] = os.getcwd() + '/gurobi902/linux64/lib'
# 将Gurobi库文件复制到Lambda函数的deployment package中
shutil.copytree(os.getcwd() + '/gurobi902/linux64/lib', '/var/task/lib')
import gurobipy
需要注意的是,在将Gurobi库文件复制到Lambda函数的deployment package中时,应该将其复制到/var/task/lib目录下。这是因为,Lambda函数的默认工作目录是/var/task,它会在这个目录下查找库文件。 如果您想更改目标存储库,只需更改路径即可。