diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..454468a --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +SERVER_PORT = 7004 # 服务启动端口 diff --git a/.gitignore b/.gitignore index 341e31e..33a1b18 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ __pycache__ -.idea \ No newline at end of file +.idea +.env diff --git a/app/config/env.py b/app/config/env.py new file mode 100644 index 0000000..ce95852 --- /dev/null +++ b/app/config/env.py @@ -0,0 +1,13 @@ +from pydantic_settings import BaseSettings +from pydantic import Field + + +class EnvSettings(BaseSettings): + server_port: int = Field(..., env="SERVER_PORT") + + class Config: + env_file = ".env" + env_file_encoding = "utf-8" + + +env = EnvSettings() diff --git a/main.py b/main.py index c402052..2eb42c4 100644 --- a/main.py +++ b/main.py @@ -13,6 +13,8 @@ from langserve import add_routes from pydantic import BaseModel, Field from starlette.staticfiles import StaticFiles +from app.config.env import env + app = FastAPI( docs_url=None, # 禁用默认 Swagger redoc_url=None, # 禁用默认 ReDoc @@ -107,4 +109,4 @@ add_routes(app=app, runnable=model, path="/qwen") if __name__ == "__main__": import uvicorn - uvicorn.run(app, host="localhost", port=8000) + uvicorn.run(app, host="localhost", port=env.server_port) diff --git a/poetry.lock b/poetry.lock index c255bee..ac1781e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1278,6 +1278,35 @@ type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" reference = "tsinghua" +[[package]] +name = "pydantic-settings" +version = "2.10.1" +description = "Settings management using Pydantic" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pydantic_settings-2.10.1-py3-none-any.whl", hash = "sha256:a60952460b99cf661dc25c29c0ef171721f98bfcb52ef8d9ea4c943d7c8cc796"}, + {file = "pydantic_settings-2.10.1.tar.gz", hash = "sha256:06f0062169818d0f5524420a360d632d5857b83cffd4d42fe29597807a1614ee"}, +] + +[package.dependencies] +pydantic = ">=2.7.0" +python-dotenv = ">=0.21.0" +typing-inspection = ">=0.4.0" + +[package.extras] +aws-secrets-manager = ["boto3 (>=1.35.0)", "boto3-stubs[secretsmanager]"] +azure-key-vault = ["azure-identity (>=1.16.0)", "azure-keyvault-secrets (>=4.8.0)"] +gcp-secret-manager = ["google-cloud-secret-manager (>=2.23.1)"] +toml = ["tomli (>=2.0.1)"] +yaml = ["pyyaml (>=6.0.1)"] + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua" + [[package]] name = "pygments" version = "2.19.2" @@ -1298,6 +1327,26 @@ type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" reference = "tsinghua" +[[package]] +name = "python-dotenv" +version = "1.2.2" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a"}, + {file = "python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua" + [[package]] name = "pyyaml" version = "6.0.3" @@ -2248,4 +2297,4 @@ reference = "tsinghua" [metadata] lock-version = "2.1" python-versions = "^3.11" -content-hash = "a1f12334c250157e041485cd09a83b9ad4f4615efe41dee682ee865c20726b7c" +content-hash = "cbd4a418461762ae481010557464342047763af195aba7f234f0e1e5b670bc27" diff --git a/pyproject.toml b/pyproject.toml index 64a3849..5943cae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,7 @@ langserve = {extras = ["server"], version = ">=0.3.0,<0.4.0"} # 更新到v0.3.0 pydantic = "2.10.6" langgraph = "^1.1.3" langchain = {extras = ["openai"], version = "^1.2.13"} +pydantic-settings = "2.10.1" [tool.poetry.group.dev.dependencies]