pyodbc - 在容器内运行应用程序时出错

问题描述 投票:0回答:3

我有一个使用 mssql 的 python 应用程序 - 我正在尝试 pyodbc,而不是使用 pymssql。在 Windows 本地计算机中运行应用程序时似乎没有问题。在打包为容器的开发环境中部署应用程序时,我看到以下错误。

from pyodbc import Error
2017-04-14T13:58:28.858638588Z ImportError: Error loading shared library libodbc.so.2: No such file or directory (needed by /usr/local/lib/python3.5/site-packages/pyodbc.cpython-35m-x86_64-linux-gnu.so)

文档要求我安装数据库驱动程序和 pyodbc。

初步检查对我来说看起来不错 - 图片 shared object dependenciessym links

python pyodbc
3个回答
22
投票

ubuntu环境没有odbc库,需要使用安装

sudo apt install unixodbc-dev 

安装后使用

更新 ubuntu
sudo apt-get update

它将解决问题。

欲进一步阅读,请访问此链接


0
投票

这是一个老问题,所以这里有一个更新的(2023 年)答案。

错误

ImportError: Error loading shared library libodbc.so.2: No such file or directory

需要安装适用于 SQL Server 的 Microsoft ODBC 驱动程序。首先,我尝试了上面提供的解决方案,即

# This solution is incomplete!
sudo apt install unixodbc-dev 

但是这个解决方案是不完整,因为它不会安装所有必需的驱动程序。例如,Python 脚本

import pyodbc                                                                                           
                                                                                                        
print(pyodbc.drivers()) 

仍会返回空列表

[]

解决方案是遵循 Microsoft 本身给出的说明。对于 Ubuntu:

case $(uname -m) in
    x86_64)   architecture="amd64" ;;
    arm64)   architecture="arm64" ;;
    *) architecture="unsupported" ;;
esac
if [[ "unsupported" == "$architecture" ]];
then
    echo "Alpine architecture $(uname -m) is not currently supported.";
    exit;
fi


#Download the desired package(s)
curl -O https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.1.1-1_$architecture.apk
curl -O https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/mssql-tools18_18.3.1.1-1_$architecture.apk


#(Optional) Verify signature, if 'gpg' is missing install it using 'apk add gnupg':
curl -O https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/msodbcsql18_18.3.1.1-1_$architecture.sig
curl -O https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5/mssql-tools18_18.3.1.1-1_$architecture.sig

curl https://packages.microsoft.com/keys/microsoft.asc  | gpg --import -
gpg --verify msodbcsql18_18.3.1.1-1_amd64.sig msodbcsql18_18.3.1.1-1_$architecture.apk
gpg --verify mssql-tools18_18.3.1.1-1_amd64.sig mssql-tools18_18.3.1.1-1_$architecture.apk


#Install the package(s)
sudo apk add --allow-untrusted msodbcsql18_18.3.1.1-1_$architecture.apk
sudo apk add --allow-untrusted mssql-tools18_18.3.1.1-1_$architecture.apk

这应该可以解决所有问题,前面提到的 Python 脚本现在应该输出

['ODBC Driver 18 for SQL Server']

警告: 如果您尝试上述不完整的解决方案,然后按照 Microsoft 提供的说明进行操作(就像我一开始所做的那样),您将遇到与循环和不完整安装以及相关依赖项相关的令人讨厌的问题。如果您不小心先执行了不完整的解决方案,最好按照 Microsoft 推荐的步骤

sudo apt purge unixodbc-dev
before 进行操作。

最后,请注意,Microsoft 现在完全支持 ODBC,因此上述说明应被视为安装 ODBC 的方式,因此是 OP 原始问题的正确答案。


-2
投票

使用 pyodbc,它有很多问题,因为您需要下载兼容的驱动程序,这可能会非常混乱。相反,使用 pymssql,它不需要额外的驱动程序。

了解更多详细信息:pymssql 与 pyodbc 与 adodbapi 与...

示例代码:https://pythonhosted.org/pymssql/pymssql_examples.html

© www.soinside.com 2019 - 2024. All rights reserved.