python - 无法让 dotenv 模块与 uvicorn 一起使用
问题描述
我正在尝试使用 uvicorn 运行 FastAPI 应用程序,但我无法让 uvicorn 找到该模块。这里有一些细节
设置
. -> env(这个文件夹是虚拟环境)
|
| ->后端(这个文件夹有 FastAPI 应用程序)
这是结构的样子
.backend
├── __init__.py
├── core
│ ├── __init__.py
│ └── config.py
├── main.py
└── requirements.txt
我正在使用此命令从后端文件夹的父级运行 Uvicorn
uvicorn backend.main:app --reload
此外,我config.py
在core
文件夹中有一个。
此文件正在尝试使用dotenv
安装在 virtualenv 中的文件
配置文件
import os
from pathlib import Path
from dotenv import load_dotenv
env_path = Path(".") / ".env"
load_dotenv(dotenv_path=env_path)
class Settings:
PROJECT_TITLE: str = "Job Board"
PROJECT_VERSION: str = "0.1.0"
POSTGRES_USER: str = os.getenv("POSTGRES_USER")
...
下面是 main.py 如何使用这个文件
主文件
from fastapi import FastAPI
from backend.core.config import settings
app = FastAPI(
title=settings.PROJECT_TITLE,
version=settings.PROJECT_VERSION,
)
@app.get("/")
def hello_api():
return {"detail": "Hello World!"}
但是,当我运行它时出现此错误
INFO: Will watch for changes in these directories: ['/Users/amit/Desktop/fastapi']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [85738] using statreload
Process SpawnProcess-1:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/multiprocessing/process.py", line 315, in _bootstrap
self.run()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/uvicorn/subprocess.py", line 76, in subprocess_started
target(sockets=sockets)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/uvicorn/server.py", line 68, in run
return asyncio.run(self.serve(sockets=sockets))
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
return future.result()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/uvicorn/server.py", line 76, in serve
config.load()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/uvicorn/config.py", line 448, in load
self.loaded_app = import_from_string(self.app)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/uvicorn/importer.py", line 24, in import_from_string
raise exc from None
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/uvicorn/importer.py", line 21, in import_from_string
module = importlib.import_module(module_str)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "/Users/bhallaamit/Desktop/fastapi/./backend/main.py", line 2, in <module>
from backend.core.config import settings
File "/Users/bhallaamit/Desktop/fastapi/./backend/core/config.py", line 3, in <module>
from dotenv import load_dotenv
ModuleNotFoundError: No module named 'dotenv'
有人可以帮帮我吗?dotenv 安装在虚拟环境中。
解决方案
我没有uvicorn
从 virtualenv 运行。解决方案python -m uvicorn backend.main:app --reload
不是直接运行它。
推荐阅读
- java - 需要帮助使用带括号和 OR 操作的正则表达式
- validation - vee-validate 是否适用于第三方 UI 组件,例如 Primevue?
- git - git push 为不同账户设置 ssh 密钥后使用默认用户名
- c - 如何从 Lua C API 获取由 lua 设置的元表
- emacs - 缓冲区缩小时内部组织模式链接不导出
- google-apps-script - 替代使用触发器为创建的每个日历事件自动发送电子邮件
- .htaccess - htaccess url rewrite 到 Nginx url rewrite 在两个文件夹中
- java - 在 jar 中为命令行项目注入带有 Maven 的存根脚本
- flutter - 使用条件语句来确定 TextField 在 Flutter 中如何出现
- java - 将用户输入字符串添加到 ArrayList 并在 TextView 中打印这些字符串