windows iis下部署python

一、准备工作

在Windows IIS上部署Python代码前,需完成以下基础准备:
  1. 1.​​安装Python​​:从Python官网下载最新稳定版(如Python 3.9+),安装时务必勾选“Add Python to PATH”,确保Python可全局调用。
  2. 2.​​安装IIS及必要组件​​:通过“控制面板→程序→启用或关闭Windows功能”开启IIS服务,勾选“Web服务器(IIS)→Web服务器→应用程序开发功能→CGI”(或“FastCGI”),完成安装。
  3. 局部截取_20251016_173013
  4. 3.​​安装Python Web框架​​:根据项目需求选择Flask(轻量级)或Django(全功能),通过pip install flask(或pip install django)安装。
  5. 4.​​安装wfastcgi模块​​:在命令提示符中运行pip install wfastcgi,用于桥接IIS与Python应用。
     

二、配置IIS支持Python

1. 启用CGI/FastCGI

  • 打开IIS管理器),选中服务器节点,双击“处理程序映射”。
  • 若需使用​​FastCGI​​(推荐),点击右侧“添加模块映射”,设置:
    • 请求路径:*(或*.py,针对Python文件)
    • 模块:FastCgiModule
    • 可执行文件:C:\Python39\python.exe|C:\Python39\Lib\site-packages\wfastcgi.py(替换为你的Python路径)
    • 名称:PythonHandler
  • 点击“请求限制”,确保“映射”选项卡中勾选“仅当请求映射到文件时才调用处理程序”。
     

2. 配置web.config文件

在Python项目根目录(如C:\flask_app)创建web.config文件,内容如下(以Flask为例):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" 
           path="*" 
           verb="*" 
           modules="FastCgiModule" 
           scriptProcessor="C:\Python39\python.exe|C:\Python39\Lib\site-packages\wfastcgi.py" 
           resourceType="Unspecified" 
           requireAccess="Script"/>
    </handlers>
    <appSettings>
      <!-- Flask应用路径(指向包含app.py的目录) -->
      <add key="PYTHONPATH" value="C:\flask_app"/>
      <!-- Flask的WSGI应用对象(格式:<项目名>.<文件名>:<app变量>) -->
      <add key="WSGI_HANDLER" value="app.app"/>
      <!-- 可选:日志路径(用于调试) -->
      <add key="WSGI_LOG" value="C:\flask_app\wfastcgi.log"/>
    </appSettings>
  </system.webServer>
</configuration>

  

三、部署Python应用

  1. 1.​​创建项目结构​​:建议采用“前后端分离”结构,例如:
     
    C:\flask_app\
    ├── app.py          # Flask主文件
    ├── requirements.txt # 依赖列表
    ├── web.config      # IIS配置文件
    └── static\         # 前端静态文件(可选)
    

      

  2. 2.​​安装依赖​​:在项目目录打开命令提示符,运行pip install -r requirements.txt,安装Flask等依赖。
  3. 3.​​配置虚拟环境(可选但推荐)​​:避免依赖冲突,运行python -m venv venv创建虚拟环境,激活后(venv\Scripts\activate)再安装依赖。
  4. 4.​​发布文件​​:将项目文件夹复制到IIS网站根目录(如C:\inetpub\wwwroot\flask_app),或在IIS中“添加网站”时直接指定项目路径。
     

四、测试与调试

  1. 1.​​启动IIS​​:在IIS管理器中选中网站,点击右侧“浏览*:<端口>”(如http://localhost:8080),查看是否能显示Python应用的输出(如Flask的“Hello World”)。
  2. 2.​​查看日志​​:若出现500错误,检查以下日志定位问题:
    • IIS日志:C:\inetpub\logs\LogFiles
    • wfastcgi日志:web.config中指定的WSGI_LOG路径(如C:\flask_app\wfastcgi.log
  3. 3.​​常见错误解决​​:
    • ​​HTTP 500​​:检查web.config中的scriptProcessor路径是否正确,或应用程序池是否运行(需设置为“无托管代码”)。
    • ​​404 Not Found​​:确认PYTHONPATH是否包含项目根目录,WSGI_HANDLER是否指向正确的WSGI对象。
    • ​​权限问题​​:确保IIS用户(如IUSR、应用程序池标识)对项目目录有“读取+执行”权限。
  4. iis 下 和 本地执行 有个不一样的情况,本地能正常显示和找到对应的路径下的中文附件,iis 下始终乱码,即便urlencode 也不行,经过很长时间的尝试,最后使用了base64 加解密文件路径,才正常在iis 显示附件

项目上的参考配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appSettings>
        <add key="PYTHONPATH" value="C:\Jay\Jay_AI\J_ChatBI-Talent\app" />
        <add key="WSGI_HANDLER" value="modern_chat_app.app" />
        <add key="WSGI_LOG" value="C:\Jay\Jay_AI\J_ChatBI-Talent\Log\wsgi.log" />
        <!-- 优化启动性能 -->
        <add key="PYTHONOPTIMIZE" value="1" />
        <add key="PYTHONDONTWRITEBYTECODE" value="1" />
        <add key="PYTHONUNBUFFERED" value="1" />
        <!-- 预加载模块 -->
        <add key="WSGI_PRELOAD" value="1" />
    </appSettings>
    <system.webServer>
        <!-- 处理程序映射 -->
    <handlers>
        <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Users\Administrator\AppData\Local\Programs\Python\Python311\python.exe|C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
        <!-- 启用压缩 -->
        <httpCompression>
            <dynamicTypes>
                <add mimeType="application/json" enabled="true" />
                <add mimeType="text/html" enabled="true" />
                <add mimeType="text/css" enabled="true" />
                <add mimeType="application/javascript" enabled="true" />
            </dynamicTypes>
        </httpCompression>
        <!-- 静态文件缓存 -->
        <staticContent>
            <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
        </staticContent>
        <!-- 应用程序池设置 -->
        <applicationInitialization doAppInitAfterRestart="true">
            <add initializationPage="/api/health" />
        </applicationInitialization>
    </system.webServer>
</configuration>

 

posted @ 2025-10-16 17:45  周捷Jay  阅读(12)  评论(0)    收藏  举报