未遵循 Uvicorn 重新加载选项

问题描述 投票:0回答:2

我有三个目录: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 文件。我如何查看目录应用程序和配置。

python fastapi uvicorn
2个回答
0
投票

(我假设你已经安装了

watchfiles

TL;博士

使用重复的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 文件。使用以下文件名模式匹配:

"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”文件。即使您将

"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", ] ] )
    

-1
投票
uvicorn.run( "app.main:fast", host=host, port=port, log_level=log_level, reload=reload, reload_dirs=["app", "config"] )
    
© www.soinside.com 2019 - 2024. All rights reserved.