在 web.config 中为 IIS 网络服务器激活 conda 环境

Activate a conda environment in web.config for IIS webserver

我的 Flask 应用程序在 D:\Applications\AccidentIdClassifier\flask_app.py 中并且包含一个名为 app 的 Flask 应用程序。我可以 运行 在我的本地系统上运行良好。

我设置了一个要用于此应用程序的 Conda 环境。我不确定如何获取 web.config 文件来引用必要的 conda 环境。我刚开始只是将 WSGI_HANDLER 设置为 flask_app.app 但我收到一个关于无法导入 numpy dll 的错误,我认为这与未激活的 venv 有关。

我看到一些关于使用 ptvs_virtualenv_proxy.handler 作为 WSGI_HANDLER 值然后使用 WSGI_ALT_VIRTUALENV_HANDLERWSGI_ALT_VIRTUALENV_ACTIVATE_THIS 的讨论,但我不知道从哪里获得 activate_this.py 而且我不确定是否需要做任何事情来为 ptvs_virtualenv_proxy.handler

启动泵

这是我目前拥有的web.config(不起作用)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
  <handlers>
   <remove name="Python27_via_FastCGI" />
   <remove name="Python34_via_FastCGI" />
   <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" 
        scriptProcessor="C:\ProgramData\Anaconda3\python.exe|C:\ProgramData\Anaconda3\Lib\site-packages\wfastcgi.py" 
        resourceType="Unspecified" requireAccess="Script" />
  </handlers>
</system.webServer>
<appSettings>
  <!-- Required settings -->
  <add key="WSGI_HANDLER" value="ptvs_virtualenv_proxy.handler" />
  <add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS" value="c:\inetpub\pyroot\default\env\Scripts\activate_this.py" />
  <add key="WSGI_ALT_VIRTUALENV_HANDLER" value="flask_app.app" /> 
  <add key="PYTHONPATH" value="D:\Applications\AccidentIdClassifier" />
</appSettings>
    <system.web>
        <identity impersonate="false" />
    </system.web>
</configuration>

我最终在 this 问题和答案上绊倒了。我尝试使用 Python 3.6.5 创建一个新的 conda 虚拟环境,然后将我的 web.config 调整到新的 python.exewfastcgi.py 位置,但仍然出现各种错误。实验上,我删除了 venv 属性并最终得到

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
  <handlers>
   <remove name="Python27_via_FastCGI" />
   <remove name="Python34_via_FastCGI" />
   <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule"
        scriptProcessor="C:\ProgramData\Anaconda3\envs\AccidentId\python.exe|C:\ProgramData\Anaconda3\envs\AccidentId\Lib\site-packages\wfastcgi.py" 
        resourceType="Unspecified" requireAccess="Script" />
  </handlers>
</system.webServer>
<appSettings>
  <!-- Required settings -->
  <add key="PYTHONPATH" value="D:\Applications\AccidentIdClassifier" />
  <add key="WSGI_HANDLER" value="flask_app.app" /> 
</appSettings>
    <system.web>
        <identity impersonate="false" />
    </system.web>
</configuration>

这似乎工作正常。

我能得出的唯一结论是,IIS 一直在努力解决 python 3.7 的问题,而 3.6.5 使其正常工作。 Anaconda 似乎不介意直接连接到 python 二进制文件而不用担心虚拟环境,所以这似乎使在那个方向上的努力变得多余。