Azure部署未安装requirements.txt中列出的Python包。

5
这是我第一次将 Flask Web 应用部署到 Azure 上的经历。我按照这个 教程 进行操作。
他们提供的默认演示应用程序对我来说可以正常工作。
之后,我通过 git 推送了我的 Flask 应用程序。日志显示部署成功。然而,当我通过“应用程序属性”中提供的链接浏览托管的应用程序时,我会收到以下 500 错误消息:

页面无法显示,因为发生了内部服务器错误。

最可能的原因:IIS 收到请求;然而,在处理请求时发生了内部错误。此错误的根本原因取决于哪个模块处理请求以及在发生此错误时工作进程正在进行什么操作。IIS 无法访问 Web 站点或应用程序的 web.config 文件。如果 NTFS 权限设置不正确,则可能会发生这种情况。IIS 无法处理 Web 站点或应用程序的配置。经过身份验证的用户没有权限使用此 DLL。请求被映射到托管处理程序,但未安装 .NET 可扩展性功能。

通过KUDU浏览wwwroot,我唯一发现的问题是,尽管在wwwroot中存在“requirements.txt”文件,但我的本地虚拟环境中安装的任何软件包都没有安装到Azure上。
我的理解是,在GIT成功推送后,Azure会pip安装在requirements.txt中找到的任何不存在的软件包。 但对我来说似乎并没有发生。
我是否做错了什么,缺少的软件包只是症状,还是可能是问题的原因?
备注:
- 我的Flask应用在本地(Linux)和第三方VPS上都运行良好 - 我从头开始重新部署了多次,但无济于事(我使用本地GIT方法) - 我将Azure Flask演示应用程序克隆到本地,仅更改了应用程序文件夹,并推回Azure,但仍然没有成功。 - Azure设置为Python 2.7,与我本地的虚拟环境相同 - 如上面链接的教程中建议的那样,我删除了“env”文件夹并重新部署以欺骗Azure重新安装虚拟环境。 它确实这样做了,但使用其自己的默认软件包而不是我requirements.txt中的软件包。
我的 requirements.txt 文件包含以下内容:

bcrypt==3.1.0 cffi==1.7.0 click==6.6 Flask==0.11.1 Flask-Bcrypt==0.7.1 Flask-Login==0.3.2 Flask-SQLAlchemy==2.1 Flask-WTF==0.12 itsdangerous==0.24 Jinja2==2.8 MarkupSafe==0.23 pycparser==2.14 PyMySQL==0.7.7 python-http-client==1.2.3 six==1.10.0 smtpapi==0.3.1 SQLAlchemy==1.0.14 Werkzeug==0.11.10 WTForms==2.1


你的应用程序根目录下是否有一个名为 .skipPythonDeployment 的文件?在部署任务期间,是否收到任何错误消息?如果可能,请提供您的 requirements.txt 文件。 - Gary Liu
@GaryLiu-MSFT > 是的,在根目录中有一个 .skipPythonDeployment 文件,里面只有一个 "hello" 字符串。部署任务没有出现任何错误消息,并以 "成功部署" 的消息结束。最后,我更新了问题,并提供了 requirements.txt 的内容。 - user3522242
我也遇到了同样的问题,我的问题很简单,请检查并回复如果您知道答案。 - Neo
https://stackoverflow.com/questions/64513533/how-to-deploy-python-on-azure-webapp - Neo
1个回答

2
作为Azure Web Apps,将运行一个deploy.cmd脚本作为部署任务来控制在部署期间要运行哪些命令或任务。您可以使用Azure-CLI命令azure site deploymentscript --python来获取Python应用程序的部署任务脚本。您可以在这个deploy.cmd脚本中找到以下脚本:
IF NOT EXIST "%DEPLOYMENT_TARGET%\requirements.txt" goto postPython
IF EXIST "%DEPLOYMENT_TARGET%\.skipPythonDeployment" goto postPython

echo Detected requirements.txt.  You can skip Python specific steps with a .skipPythonDeployment file.

所以.skipPythonDeployment将跳过部署任务中的所有后续步骤,包括创建虚拟环境。

您可以尝试从应用程序中删除.skipPythonDeployment,然后再试一次。

此外,请参阅https://github.com/projectkudu/kudu/wiki/Custom-Deployment-Script获取更多信息。


我去掉了 .skipPythonDeployment,然后它开始传送软件包。它在 bcrypt 失败并显示错误“无法找到 vcvarsall.bat”,但那是另一个问题,因为您已经解决了我的初始问题。非常感谢Gary! - user3522242
https://stackoverflow.com/questions/64513533/how-to-deploy-python-on-azure-webapp - Neo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接