pycharm使用fastapi/uvicorn无法reload的问题

发布时间 2023-10-14 14:09:30作者: aminor

省流

pycharm的问题,建议控制台直接输uvicorn main:app --reload,而不是点击右上角的运行

相关issue

https://github.com/encode/uvicorn/issues/2000
https://youtrack.jetbrains.com/issue/PY-60962/os.killpid-signal.CRTLCEVENT-ignored-when-running-python-program-from-Pycharm
https://youtrack.jetbrains.com/issue/PY-63296/Pycharm-FastAPI-uvicorn-run-vs-terminal-differences-and-issue-with-slow-reloading-when-it-works
https://youtrack.jetbrains.com/issue/PY-63358

gpt省流

问题概述:
在PyCharm中使用uvicorn和FastAPI时,重新加载(reload)功能无法正常工作。当文件发生修改时,uvicorn重新加载非常缓慢或根本不重新加载,导致开发体验不佳。

讨论和探讨:

  1. 用户在GitHub上提出了此问题,指出在Windows 10上使用PyCharm时,uvicorn的重新加载速度非常慢。
  2. 有用户发现uvicorn源代码中的basereload.py文件的restart()函数可能存在问题。
  3. 一些用户发现该问题只在通过PyCharm运行程序时出现,直接在Python中运行或终端中使用uvicorn命令时没有此问题。
  4. 问题的作者在PyCharm问题跟踪器上报告了此问题,并提供了一个简单的程序来重现该问题。
  5. 用户们提供了不同的解决方法,如在运行配置中启用"Emulate terminal in output console"选项、使用调试模式运行项目或在Docker环境中运行项目。

解决方案:

  1. 降级到uvicorn v0.20.0版本,重新加载功能可以立即生效。
  2. 在PyCharm的运行配置中启用"Emulate terminal in output console"选项,可以解决重新加载速度慢的问题。然而,这会导致ANSI转义序列无法正常渲染。
  3. 使用调试模式运行项目或在基于Docker的运行环境中运行项目也可以绕过该问题。

总结:
在PyCharm中使用uvicorn和FastAPI时,重新加载功能可能会遇到速度慢或根本不重新加载的问题。这个问题可能与uvicorn源代码中的basereload.py文件的restart()函数有关,以及PyCharm在处理信号时的行为。目前,降级uvicorn版本、在运行配置中启用"Emulate terminal in output console"选项或使用调试模式或Docker环境运行项目是可能的解决方案。建议关注问题跟踪器页面以获取最新的更新和解决方案。