在IIS部署Python FastAPI遇路径错误及最终解决方法
在IIS上部署FastAPI(基于Uvicorn)的问题与解决过程
部署环境与前期操作
- 安装Python 3.9.13并添加至系统PATH
- 安装HTTPPlatformHandler v1.2
- 在
C:/test创建虚拟环境venv - 通过pip安装
fastapi[all] - 在
C:/test放置main.py,代码如下:
from fastapi import FastAPI app = FastAPI() @app.get("/") def root(): return {"message": "Hello World"}
- 在CMD中验证脚本可正常运行,执行命令:
uvicorn main:app --host 0.0.0.0 --port 5000
- 启动IIS,添加除.NET Extensibility 3.5和ASP .NET 3.5外的所有Web服务器应用程序开发组件
- 添加网站,绑定端口5000,配置
web.config如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <httpPlatform processPath="C:\test\venv\Scripts\python.exe" arguments="uvicorn main:app --host 0.0.0.0 --port %HTTP_PLATFORM_PORT%" stdoutLogFile="C:\ML_API_main\LogFiles\python.log"> <environmentVariables> <environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" /> </environmentVariables> </httpPlatform> <handlers> <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" /> </handlers> </system.webServer> </configuration>
首次部署问题
完成配置后浏览器持续加载,日志报错:
No Python at 'C:\Users\Administrator\AppData\Local\Programs\Python\Python39\python.exe'
确认该路径下python.exe存在且可在CMD中运行,尝试执行权限授予命令:
ICACLS c:\test\venv\ /grant "IIS AppPool\test:F"
但未解决问题。
问题排查与最终解决(2022年12月5日)
- 第一次更新:取消虚拟环境,将代码文件夹移至IIS的
wwwroot目录,原Python路径问题解决,但出现HTTP Error 502.3 - 网关错误。 - 最终解决:为Python.exe所在文件夹及代码物理目录授予
IIS_IUSRS权限,操作方式为右键文件夹>属性>安全>更改权限>手动添加IIS_IUSRS用户并赋予相应权限,部署成功。
内容的提问来源于stack exchange,提问作者jscodes
相关产品推荐
相关产品推荐

