我有一项关于诗歌的服务。
import uvicorn
import os
from fastapi import FastAPI
app = FastAPI(title=os.getenv("APP_NAME", "app"))
def main() -> None:
uvicorn.run(app, host=os.getenv("APP_HOST", "localhost"), port=os.getenv("APP_PORT", 8000))
if __name__ == "__main__":
main()
我试图在开始运行一切之前设置环境变量。但我不太明白如何正确地做到这一点。
在执行之前,poetry run main
我尝试使用 设置环境变量set KEY=val
,但它不起作用,并且它们在代码中仍然不可见。也就是说,set APP_PORT=9000
在发布之后,它仍然是 8000。
我尝试设置这样的变量:$env:APP_PORT="9000"
。这已经起作用并且代码已经开始运行。但端口 9000 应该是 int (所以错误消息说)并且$env:APP_PORT=9000
没有帮助。而且在代码中添加 似乎不是很方便port = int(os.getenv("APP_PORT", 8000))
。
如何正确添加变量?如果我通过 PyCharm 运行它,那么一切都会正常。它如何设置环境变量?
如果
$env:APP_PORT="9000"
它有助于在环境中传递变量poetry
(据 Google 告诉我,这是 powershell 的一种方法),那么就使用它。您还可以安装插件
poetry-dotenv-plugin
:poetry
那么就可以不手动设置环境变量,而是将它们注册在
.env
文件中,例如如果您需要指定多个值,此选项很方便。
关于第二部分:环境变量总是存储字符串。如果您需要获取数字,则需要将特定值转换为数字,而
int(os.getenv("APP_PORT", 8000))
您提到的方法 through 是一个完全可行的选择。int()
例如,如果您不喜欢将其包装在 中,则可以使用pydantic-settings包(文档)来描述模型中的字段、它们的类型和默认值。如果环境变量中有合适的值,它们将替换默认值,并且值将根据模型中的类型注释进行转换。例子:
运行时不写入环境变量的输出:
通过环境变量传递值的输出(在 Linux 上运行):
除了环境变量之外
.env
,还支持文件,另请参阅:Dotenv (.env) 支持,这无需安装插件即可工作poetry-dotenv-plugin
。