Python 在Azure应用程序服务上为Flask web应用程序安装unixodbc dev

Python 在Azure应用程序服务上为Flask web应用程序安装unixodbc dev,python,azure,flask,pyodbc,azure-web-app-service,Python,Azure,Flask,Pyodbc,Azure Web App Service,我正在尝试在Azure应用程序服务上部署Flask web应用程序。此应用程序正在使用pyodbc连接到mssql;但是,当我部署应用程序时,会出现此错误 ImportError:libodbc.so.2:无法打开共享对象文件:无此类文件 文件或目录 我知道我可以通过安装unixodbc/unixodbc-dev来解决这个问题,方法如下: sudo apt-get install unixodbc-dev 我试图通过访问Kudu的SSH手动完成这项工作;然而,这个问题仍然存在 我正在使用本地存

我正在尝试在Azure应用程序服务上部署Flask web应用程序。此应用程序正在使用pyodbc连接到mssql;但是,当我部署应用程序时,会出现此错误

ImportError:libodbc.so.2:无法打开共享对象文件:无此类文件 文件或目录

我知道我可以通过安装unixodbc/unixodbc-dev来解决这个问题,方法如下:

sudo apt-get install unixodbc-dev
我试图通过访问Kudu的SSH手动完成这项工作;然而,这个问题仍然存在

我正在使用本地存储库,并将带有git的代码推送到Azure。当我收到这个错误时,我无法从Kudu访问控制台,所以我不得不对代码进行注释并再次推送。然后,我尝试通过apt-get-install-unixodbc-dev手动安装这个包(因为sudo不被识别),它运行良好。然后我用pyodbc再次推送代码,出现了相同的错误。我想每次我这么做的时候,包都会被删除,因为我发现在推送操作之后,这个包创建的一些文件夹会被删除

我经常遇到的错误如下:


根据您的描述,您使用的是基于Docker的Azure WebApp for Linux。因此,您在容器中所做的任何更改都只需写入
容器层
,当删除容器时(包括停止/重新启动操作),该层将被删除,如官方Docker文档所述,如下所示

图像和层

创建新容器时,将在基础层的顶部添加一个新的可写层。该层通常称为“容器层”。对正在运行的容器所做的所有更改(如写入新文件、修改现有文件和删除文件)都会写入此精简可写容器层

容器和层

容器和图像之间的主要区别在于顶部的可写层。向容器中添加新数据或修改现有数据的所有写入操作都存储在此可写层中删除容器时,可写层也会被删除。基础图像保持不变

因此,若要将更改保存到正在运行的容器中,则必须通过命令提交这些更改以创建新映像。或者,在安装所需软件包的场景中,您可以按照Azure文档的说明将以下命令添加到Dockerfile中,以创建一个映像,将其推送并部署到Azure WebApp for Linux

# Add unixodbc support
RUN apt-get update \
        && apt-get install -y --no-install-recommends unixodbc-dev