[project] name = "backend" version = "1.0.0" description = "xjz-payment-platform后端工程" readme = "README.md" requires-python = ">=3.10" dependencies = [ "agno==2.5.8", "aiofiles==24.1.0", # 文件操作 "aiosqlite==0.17.0", # sqlite 异步操作数据库 "alembic==1.15.1", # 数据库迁移 "apscheduler==3.11.0", # 定时任务 "asyncmy==0.2.11", # mysql 异步操作数据库:基于 mysqlclient:asyncmy 是 mysqlclient 的异步版本,mysqlclient 是一个 C 语言编写的 MySQL 客户端,性能较高。性能:asyncmy 通常在性能上优于 aiomysql,特别是在高并发和大数据量的场景下。 "asyncpg==0.30.0", # postgresql 异步操作数据库基于 psycopg2:asyncpg 是 psycopg2 的异步版本,psycopg2 是一个 pure-Python PostgreSQL 数据库适配器。性能:asyncpg 通常在性能上优于 psycopg2,特别是在高并发和大数据量的场景下。 "bcrypt==4.0.1", # 密码加密解析,切勿升级,如果升级,请同时升级python版本 "bleach==6.3.0", # 过滤 HTML 标签 "click==8.1.7", # 命令行参数解析 "croniter>=1.0.12,<5.0.0", # cron(与 prefect 约束一致;部署 requirements.txt 同源) "cryptography==45.0.2", # mysql8 密码加密 "fastapi==0.115.2", # fastapi 框架 "fastapi-limiter==0.1.6", # 接口限流 "greenlet==3.1.1", # 协程框架 "gunicorn==23.0.0", # 协程框架 "httpx==0.27.2", # HTTP 客户端 "itsdangerous==2.2.0", # 用于安全处理各种数据,如密码、密钥等 "jinja2==3.1.6", # 模板引擎 "loguru==0.7.3", # 日志 "openai==2.28.0", "openpyxl==3.1.5", # Excel "pandas==2.2.3", # 数据处理 "passlib==1.7.4", # 密码加密 "prefect>=3.5.0,<4", # 工作流编排(与 typer>=0.19 兼容;部署与 requirements.txt 一致) "pillow==11.0.0", # 图片处理 "psutil==6.1.0", # 系统信息 "psycopg==3.3.2", # postgresql 同步操作数据库基于 psycopg是psycopg2升级版:psycopg2 是一个 pure-Python PostgreSQL 适配器。 "psycopg-binary==3.3.2", # postgresql 异步操作数据库基于 psycopg2:asyncpg 是 psycopg2 的异步版本,psycopg2 是一个 pure-Python PostgreSQL 数据库适配器。 "pydantic-settings==2.5.2", # 配置设置 "pydantic-validation-decorator==0.1.4", # 模型验证 "pyjwt==2.9.0", # OAuth2 "pymysql==1.1.2", # mysql 同步步操作数据库基于 pymysql:aiomysql 是 pymysql 的异步版本,pymysql 是一个纯 Python 实现的 MySQL 客户端。成熟度:aiomysql 相对较为成熟,社区支持较好,文档也比较完善。 "python-multipart==0.0.9", # request.form() 对表单进行「解析」时安装 "redis==7.1.0", # redis 同/异步操作数据库(用户celery配套使用)redis 异步操作数据库 redis已经完全具备了aioredis的功能,无需重复安全,且aioredis已经不再维护也不兼容3.10+的版本 "rich==13.9.4", # 终端打印美化 "tomli>=2.0.1 ; python_full_version < '3.11'", # 解析 plugin.toml(3.11+ 用标准库 tomllib) "sqlalchemy==2.0.45", # 数据库ORM "sqlglot[rs]==27.8.0", # sql 解析 "typer==0.19.0", # 命令行工具 "user-agents==2.2.0", # 获取用户UA "uvicorn==0.30.6", # uvicorn web 框架 "websockets>=15.0.1,<16.0", # websocket(prefect>=3.5 需 >=15.0.1;与部署 requirements.txt 一致) "alipay-sdk-python>=3.7.1018", # 支付宝支付SDK "pyzbar>=0.1.9", "opencv-python>=4.13.0.92", "alibabacloud-dysmsapi20180501==1.0.10", "alibabacloud-dysmsapi20170525==4.5.1", "aiohttp>=3.13.5", ] [dependency-groups] dev = [ "fakeredis>=2.21.0,<3", # 测试:内存 Redis,配合 TESTING "pytest==9.0.2", "ruff==0.14.13", # 代码检查/格式化 ] [tool.uv] default-groups = ["dev"] # 本地 uv sync 含 dev;生产 pip -r requirements.txt 不含 pytest/ruff/fakeredis [[tool.uv.index]] name = "tuna" url = "https://pypi.tuna.tsinghua.edu.cn/simple" [tool.ruff] line-length = 100 indent-width = 4 preview = true fix = true show-fixes = true exclude = [ ".bzr", ".direnv", ".eggs", ".git", ".git-rewrite", ".hg", ".ipynb_checkpoints", ".mypy_cache", ".nox", ".pants.d", ".pyenv", ".pytest_cache", ".pytype", ".ruff_cache", ".svn", ".tox", ".venv", ".vscode", "__pypackages__", "_build", "buck-out", "build", "dist", "node_modules", "site-packages", "venv", ] extend-include = ["*.pyw"] [tool.ruff.lint] select = [ "FAST", "F", "E", "W", "F", "I", "B", "C4", "UP", ] ignore = [ "E501", # line too long, handled by black "B008", # do not perform function calls in argument defaults "C901", # too complex "W191", # indentation contains tabs "B904", # Within an `except` clause "B010", # Do not call with a constant attribute value. ] [tool.ruff.lint.per-file-ignores] "tests/conftest.py" = ["E402"] # 先设置 TESTING/SQLite 环境再 import 应用 [tool.ruff.format] docstring-code-format = true preview = true quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto"