使用unixODBC时,无法在AWS Lambda中找到ODBC驱动程序

J.C*_*hen 6 python lambda odbc pyodbc amazon-web-services

目标:连接到AWS Lambda中的MS SQL Server

来自AWS Lambda的错误:

START RequestId: 37951004-404b-11e7-98fd-5177b3a46ec6 Version: $LATEST
module initialization error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 13 for SQL Server' : file not found (0) (SQLDriverConnect)")
END RequestId: 37951004-404b-11e7-98fd-5177b3a46ec6
Run Code Online (Sandbox Code Playgroud)

我的方法:

指的 通过virtualenv中的Tesseract OCR在AWS上LAMBDA

  1. 在aws ec2实例中为SQL Server安装了unixODBC和ODBC驱动程序13
  2. 创建了一个部署包(pip install -t pyodbc /home/ec2-user/lambda即将相关文件复制到zip root)
  3. mkdir lib 并通过查找 ldd pyodbc.so*复制所有共享库ldd libmsodbcsql-13.0.so.1.0
  4. 改变LD_LIBRARY_PATHliblambda.py并上传zip包LAMBDA

Zip文件结构:

.
+-- lambda.py
+-- pyodbc.so
+-- pyodbc-4.0.16-py2.7.egg-info
+-- lib
|   +-- libodbc*.so etc.
Run Code Online (Sandbox Code Playgroud)

我猜:

从响应中看,除了unixODBC管理器在AWS Lambda Instance上找不到驱动程序之外,所有内容都运行正常

题:

如何将驱动程序与我的程序包捆绑以供AWS Lambda使用?或者有没有办法告诉ODBC驱动程序管理器寻找libmsodbcsql-13.0.so.1.0

我已经尝试过离线安装unixODBC并设置./configure --prefix=/home/ec2-user/lambda --libdir=..和手动更改odbcinst.ini但没有希望.


(对不起,我对python环境以外的任何东西都不太熟悉所以我不确定所有的共享库的东西,并且通过谷歌搜索几天无法解决我的问题)

ken*_*orb 1

有没有办法告诉 ODBC 驱动管理器去寻找libmsodbcsql-13.0.so.1.0

您可以运行odbcinst -j并检查驱动程序 ini 文件所在的位置 ( odbcinst.ini),以便您可以在那里设置路径。否则创建一个新的,~/.odbcinst.ini可以在其中定义 SQL ODBC 驱动程序库的路径。

INI 配置文件示例:

[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/path/to/libmsodbcsql-13.0.so.1.0
Run Code Online (Sandbox Code Playgroud)

以下是创建配置文件 ( ) 的示例命令~/.odbcinst.ini

printf "[ODBC Driver 13 for SQL Server]\nDescription=Microsoft ODBC Driver 13 for SQL Server\nDriver=/path/to/libmsodbcsql-13.0.so.1.0\n" >> ~/.odbcinst.ini
Run Code Online (Sandbox Code Playgroud)

蟒蛇

如果驱动程序文件存在,但仍然找不到文件,请运行:conda update libgcc

请参阅:PyODBC:即使存在也无法打开驱动程序