首页 > 解决方案 > 在 web.config 中为 IIS 网络服务器激活 conda 环境

问题描述

我的烧瓶应用程序在D:\Applications\AccidentIdClassifier\flask_app.py其中并包含一个名为app. 我可以在我的本地系统上正常运行它。

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

我看到了一些关于使用价值然后使用ptvs_virtualenv_proxy.handler的讨论,但我不知道从哪里得到一个,我不确定我是否需要做任何事情来启动泵WSGI_HANDLERWSGI_ALT_VIRTUALENV_HANDLERWSGI_ALT_VIRTUALENV_ACTIVATE_THISactivate_this.pyptvs_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>

标签: pythonflaskiisanacondawsgi

解决方案


我最终偶然发现了这个问题和答案。我尝试使用 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 二进制文件而不用担心更多的虚拟环境,所以这似乎使这方面的努力变得多余。


推荐阅读