如何更改 Azure Git CI 部署默认 python 版本

How to change Azure Git CI deployment default python version

Azure 在应用程序设置中仅支持 Python 版本 2.7 和 3.4,我通过 App Service 为我的 django 应用程序安装了更新的 Python 3.6.2。我按照 continuous integration with Azure & GitHub 的设置进行操作,发现当 Azure 是 运行 部署命令时部署失败。下面是显示 Azure 决定使用默认 2.7 的日志的一部分,即使我在 web.config 文件

中指定使用 3.6.2
Detected requirements.txt.  You can skip Python specific steps with a .skipPythonDeployment file.
Detecting Python runtime from site configuration
Detected python-2.7
Creating python-2.7 virtual environment.
...
#(and it just continue and install the requirements.txt with pip using python-2.7 which failed)

Azure will determine the version of Python to use for its virtual environment with the following priority:

  1. version specified in runtime.txt in the root folder
  2. version specified by Python setting in the web app configuration (the Settings > Application Settings blade for your web app in the Azure Portal)
  3. python-2.7 is the default if none of the above are specified

我无法使用 runtime.txt 指定版本,因为 3.6.2 不是内容的有效值。看起来 Azure 忽略了我的 web.config,只是跳转到使用 2.7 作为默认值,因为指定了上面的 none。

截至目前,我必须进入 Kudu 控制台并使用 3.6.2 手动部署我的应用程序。从 Github 部署我的代码时,如何将其设置为使用 3.6.2 作为默认值?

下面是我的web.config文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="PYTHONPATH" value="D:\home\site\wwwroot"/>
    <!-- Django apps only: change the project name to match your app -->
    <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
    <add key="DJANGO_SETTINGS_MODULE" value="mysite.settings" />
    <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
  </appSettings>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
           scriptProcessor="D:\home\python362x86\python.exe|D:\home\python362x86\wfastcgi.py"
           resourceType="Unspecified" requireAccess="Script"/>
    </handlers>
  </system.webServer>
</configuration>

根据我的经验,如果您在 Azure Python 网络应用程序中使用 python 扩展,则不必在应用程序设置中选择 Python 版本。

请参考我做的步骤如下:

第 1 步: 创建 azure web 应用程序并添加扩展(这里是 Python 3.6.2 x86)

第 2 步: 准备您的 django 项目并添加 web.config.

web.config:

<configuration>
  <appSettings>
    <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
    <add key="PYTHONPATH" value="D:\home\site\wwwroot"/>
    <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
    <add key="DJANGO_SETTINGS_MODULE" value="<your project name>.settings" />
  </appSettings>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="handler.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="D:\home\python362x86\python.exe|D:\home\python362x86\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/>
    </handlers>
    <rewrite>
      <rules>
        <rule name="Static Files" stopProcessing="true">
          <conditions>
            <add input="true" pattern="false" />
          </conditions>
        </rule>
        <rule name="Configure Python" stopProcessing="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{REQUEST_URI}" pattern="^/static/.*" ignoreCase="true" negate="true" />
          </conditions>
          <action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

第 3 步: 将站点 URL 域添加到 ALLOWED_HOSTS in settings.py in你的 Django 项目

ALLOWED_HOSTS = ['***.azurewebsites.net']

第 4 步: 通过 FTP 或 Git.

发布您的 django 项目

第5步:切换到Kudu CMD并命令cd Python362x86touch get-pip.py并复制内容url https://bootstrap.pypa.io/get-pip.py 通过编辑按钮进入 get-pip.py,然后 运行 python get-pip.py 安装 pip 工具。

第 6 步: 安装 django 软件包或通过 python -m pip install ***[=29= 安装您需要的任何软件包]

然后成功访问您的域url。

您也可以参考official tutorial

希望对你有帮助。


更新答案:

根据您提供的屏幕截图和日志,我看到应用程序在 运行 时间检测到 Python 是 2.7 版本。

我在KUDU上查看环境变量,发现Python 2.7版本。

我建议您用您使用的扩展 Python 版本覆盖环境变量中的 Python 版本。

请重试。