python - 在 Azure API 上托管 Flask(python) API

标签 python python-3.x azure flask azure-api-apps

团队,我一直在尝试在 Azure API 应用程序上托管 Flask API。而且它不起作用。

Azure API 应用程序正在运行。托管页面打开​​,Python 版本为 3.6.6。

我无法托管简单的 hello world 项目,我收到的不同错误如下。

  1. 无法在 web.config 中添加处理程序。如果添加500错误。

  2. 无法从 kudu 安装 Flask。获取权限错误。当使用 --user 安装时,flask 将安装到用户文件夹。更改了路径以包含此文件夹,但仍然无法导入 Flask。

  3. 使用 git 部署。上传成功,但部署时出现错误,指出 python 3.6 的运行时版本不受支持。

可能我缺少在 Azure API 应用程序上设置 python 的基础知识?问题是我总是收到 500 错误。但基本的 azure 托管起始页可以工作(除非我触摸 web.config)

注意: - 遵循 Baby Python API 教程。

  • 按照 Azure 帮助部分中给出的说明进行操作

  • 还添加了 python 3.6 扩展。一切都没有改变。

最佳答案

有一个类似的 SO 线程的答案 How to run python3.7 based flask web api on azure帮助使用 WSGI_Handle 部署您的 Flask 应用。

或者,如果您只是想知道如何在 Azure 上的官方 Flask 网站中运行 hello world 演示,就像在本地计算机上使用 flask run 一样,您可以按照我的步骤如下。

  1. 通过 Kudu 在您的 API 应用程序上安装 Python 3.6.4 x64 站点扩展。 enter image description here

  2. 转到 Kudu CMD 控制台, enter image description here

然后按照以下命令在 Kudu 控制台中升级 pip 并安装 flask

D:\home\python364x64>python -V
Python 3.6.4

D:\home\python364x64>pip -V
pip 9.0.1 from D:\home\python364x64\lib\site-packages (python 3.6)


D:\home\python364x64>python -m pip install --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl (1.3MB)
Installing collected packages: pip
  Found existing installation: pip 9.0.1
    Uninstalling pip-9.0.1:
      Successfully uninstalled pip-9.0.1
Successfully installed pip-18.1

D:\home\python364x64>pip install flask
Collecting flask
  Downloading https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl (91kB)
Collecting click>=5.1 (from flask)
  Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB)
Collecting Jinja2>=2.10 (from flask)
  Downloading https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl (126kB)
Collecting Werkzeug>=0.14 (from flask)
  Downloading https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl (322kB)
Collecting itsdangerous>=0.24 (from flask)
  Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask)
  Downloading https://files.pythonhosted.org/packages/9d/80/9a5daf3ed7b8482e72ee138cef602b538cfba5c507e24e39fb95c189b16b/MarkupSafe-1.1.0-cp36-cp36m-win_amd64.whl
Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask
  The script flask.exe is installed in 'D:\home\python364x64\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed Jinja2-2.10 MarkupSafe-1.1.0 Werkzeug-0.14.1 click-7.0 flask-1.0.2 itsdangerous-1.1.0
  • 上传 app.pyweb.config 文件, enter image description here
  • 以下是他们的内容。

    app.py 内容:

    from flask import Flask
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "Hello World!"
    

    web.config 内容:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <appSettings>
            <add key="PYTHONPATH" value="D:\home\site\wwwroot" />
            <add key="PATH" value="D:\home\python364x64;D:\home\python364x64\Scripts;%PATH%" />
        </appSettings>
      <system.webServer>
        <handlers>
            <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
        </handlers>
        <httpPlatform processPath="D:\home\python364x64\Scripts\flask.exe" arguments="run --port %HTTP_PLATFORM_PORT%" stdoutLogEnabled="true" startupRetryCount='10'>
        </httpPlatform>
      </system.webServer>
    </configuration>
    

    然后刷新您的浏览器或先重新启动您的API应用程序到浏览器,您将看到如下图。

    enter image description here

    关于python - 在 Azure API 上托管 Flask(python) API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53906301/

    相关文章:

    python - 'itertools' 文件在哪里

    python - 将嵌入的 Excel 对象从 do​​cx 文件转换为图像

    python-3.x - Python3 : Multiple global vars

    python - 如何在Python的for循环中增加1或2

    c# - 通过正则表达式或通配符检索 Azure 存储上的 blob 列表

    python - 使用 OpenCV 坐标裁剪图像

    python - Pandas:Dataframe 计算 - 带除法的新行、带总和和平均值的新列

    azure - 对于 Microsoft Graph 中缺少 UsersPermissionToUserConsentToAppEnabled 是否有任何解决方法?

    python - 类型错误 : object() takes no parameters - but only in Python 3

    javascript - 使用 Blob 特定的 SAS token 连接和更新 Azure Blob