我有三个目录:app、config 和 private
我在安装了 WatchFiles 的情况下以编程方式运行 uvicorn:
uvicorn.run(
"app.main:fast",
host=host,
port=port,
log_level=log_level,
reload=reload,
reload_includes=["app/*", "config/*", "manage.py", ".env"],
)
但由于某种原因,私有目录也会被监视并重新加载。我尝试这样做:
uvicorn.run(
"app.main:fast",
host=host,
port=port,
log_level=log_level,
reload=reload,
reload_dirs=["app", "config"],
reload_includes=["app/*.py", "config/*.py", "manage.py", ".env"],
reload_excludes=["*.py"]
)
但这只是忽略了所有的 python 文件。我如何查看目录应用程序和配置。
watchfiles
)
使用重复的Unix文件名模式匹配来排除所有'.py',并一一添加你需要观看的:
uvicorn.run(
"app.main:fast",
host=host,
port=port,
log_level=log_level,
reload=reload,
reload_includes=[
"app/**/*.py",
"config/**/*",
"manage.py",
".env"
],
reload_excludes=[
"./**/*.py",
]
)
首先,如果名为
private
的目录有 .py
文件,则默认会观看它 参见 Uvicorn 文档。您需要为 reload_excludes
和 reload_includes
提供 Unix 文件名模式匹配列表。您提供的模式仅匹配第一级中的目录和文件。例如,运行:
from pathlib import Path
current_dir = Path.cwd()
for match in current_dir.glob("app/*"):
print(match)
你会看到它将输出“app”目录中的所有目录和文件,但不输出其中的子文件夹或文件。递归定位文件扩展名
"templates/**/*.html"
.现在假设您还想定位“staticfiles”目录中的所有 .js 和 .css 文件。
uvicorn.run(
"app.main:fast",
host=host,
port=port,
log_level=log_level,
reload=reload,
reload_includes=[
"templates/**/*.html",
"staticfiles/**/*.css",
"staticfiles/**/*.js"
]
)
从文件夹中排除 .py
文件
"private/**/*.py"
传递给
reload_excludes
参数,由于默认情况下包含
**/*.py
,您也必须排除模式
**/*.py
并一一添加所有其他 Python 文件模式:
uvicorn.run(
"app.main:fast",
host=host,
port=port,
log_level=log_level,
reload=reload,
reload_includes=[
"templates/**/*.html",
"staticfiles/**/*.css",
"staticfiles/**/*.js"
"app/**/*.py",
"config/**/*",
"manage.py",
".env",
reload_excludes=[
"./**/*.py",
]
]
)
uvicorn.run(
"app.main:fast",
host=host,
port=port,
log_level=log_level,
reload=reload,
reload_dirs=["app", "config"]
)