fix: load .env without python-dotenv when package is missing
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -3,7 +3,6 @@ import secrets
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from dotenv import load_dotenv
|
|
||||||
from flask import Flask, flash, redirect, render_template, request, url_for
|
from flask import Flask, flash, redirect, render_template, request, url_for
|
||||||
from flask_login import LoginManager, current_user, login_required, login_user, logout_user
|
from flask_login import LoginManager, current_user, login_required, login_user, logout_user
|
||||||
from flask_wtf.csrf import CSRFProtect
|
from flask_wtf.csrf import CSRFProtect
|
||||||
@@ -11,9 +10,45 @@ from flask_wtf.csrf import CSRFProtect
|
|||||||
from forms import GroupForm, LoginForm, ServiceForm
|
from forms import GroupForm, LoginForm, ServiceForm
|
||||||
from models import Service, ServiceGroup, User, db
|
from models import Service, ServiceGroup, User, db
|
||||||
|
|
||||||
# 与 app.py 同目录的 .env;若文件不存在则忽略。已存在于操作系统中的同名变量不会被覆盖。
|
|
||||||
_ROOT = Path(__file__).resolve().parent
|
_ROOT = Path(__file__).resolve().parent
|
||||||
load_dotenv(_ROOT / ".env")
|
|
||||||
|
|
||||||
|
def _load_env_file(path: Path) -> None:
|
||||||
|
"""若未安装 python-dotenv,用最小实现加载 .env(不覆盖已有环境变量)。"""
|
||||||
|
if not path.is_file():
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
raw = path.read_text(encoding="utf-8-sig")
|
||||||
|
except OSError:
|
||||||
|
return
|
||||||
|
for line in raw.splitlines():
|
||||||
|
s = line.strip()
|
||||||
|
if not s or s.startswith("#"):
|
||||||
|
continue
|
||||||
|
if s.lower().startswith("export "):
|
||||||
|
s = s[7:].lstrip()
|
||||||
|
if "=" not in s:
|
||||||
|
continue
|
||||||
|
key, _, rest = s.partition("=")
|
||||||
|
key = key.strip()
|
||||||
|
if not key:
|
||||||
|
continue
|
||||||
|
val = rest.strip()
|
||||||
|
if len(val) >= 2 and val[0] == val[-1] and val[0] in "\"'":
|
||||||
|
val = val[1:-1]
|
||||||
|
if key not in os.environ:
|
||||||
|
os.environ[key] = val
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
from dotenv import load_dotenv as _dotenv_load
|
||||||
|
except ImportError:
|
||||||
|
_dotenv_load = None
|
||||||
|
|
||||||
|
if _dotenv_load:
|
||||||
|
_dotenv_load(_ROOT / ".env")
|
||||||
|
else:
|
||||||
|
_load_env_file(_ROOT / ".env")
|
||||||
|
|
||||||
login_manager = LoginManager()
|
login_manager = LoginManager()
|
||||||
csrf = CSRFProtect()
|
csrf = CSRFProtect()
|
||||||
|
|||||||
Reference in New Issue
Block a user