From f60915b70b24e208d2f3ef4804c3c6612626166e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=BF=E4=BA=91=E7=A7=8B=E6=9C=88?= <15273589815@163.com> Date: Fri, 11 Sep 2026 20:08:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=A3=B0=E6=98=8E=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=20aiosqlite=EF=BC=88=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E8=A2=81=E8=81=AA=E7=BA=BF=E5=90=8E=E6=9A=B4=E9=9C=B2=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 合并后 tests/unit/worker/test_offsite_mail_worker.py 的 6 个用例直接 ModuleNotFoundError: No module named 'aiosqlite' —— 它们走 SQLAlchemy 的 SQLite 内存库,而 aiosqlite 既不在 requirements.txt、也不在 pyproject 的 dev 依赖里 (dev 原先只有 pytest / pytest-asyncio / ruff / mypy)。 后果不是"本机缺个包":任何人 clone 下来、按文档装完依赖、跑测试,这 6 个用例必然 失败,而且报错指向 SQLAlchemy 内部(aiosqlite.py:480),看不出是缺依赖。 已加入 dev 依赖并注明用途。 同时记录一个本机环境问题(未改代码):pytest 的默认 basetemp %TEMP%\pytest-of-Windows 被权限更高的会话占住,make_numbered_dir 扫不动 ⇒ 18 个 setup ERROR。NL_develop 的 conftest 修复(tmp_path 落到仓库内 .workdir/)能根治, 等合并;本次用重定向 $env:TEMP 临时绕开(--basetemp 无效,因为 pytest 仍会扫默认 root)。 另需注意 .workdir 目前不在 .gitignore 里,那套修复合并进来前要补上。 合并后现状:unit+contract 810 passed / integration 76 passed / ruff 干净 / 表数 68(alembic 已 upgrade 到位)/ mypy 3 个错(全在袁聪的 offsite_fund_service.py, 属真实类型问题,未擅自改别人的业务代码)。 --- .gitignore | 4 ++++ pyproject.toml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.gitignore b/.gitignore index eddb54b..9e25a1b 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,7 @@ data/offsite_mail/ logs/ # 浏览器拖拽文档的落点:只含 dsh-dropdoc 生成的目录清单,不是项目产物 .dsh-drop/ + +# pytest ÁÙʱĿ¼£¨basetemp Âäµ㣻NL_develop µÄ conftest Ð޸´ҲÓÃËü£© +.workdir/ + diff --git a/pyproject.toml b/pyproject.toml index 207a0df..1593f9f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,6 +42,10 @@ dev = [ "pytest-asyncio>=0.25,<1", "ruff>=0.9,<1", "mypy>=1.14,<2", + # 测试用:场外邮件 Worker 等用例走 SQLAlchemy 的 SQLite 内存库。 + # 原先没声明 —— 别人的环境装完依赖跑测试,这 6 个用例会直接 + # ModuleNotFoundError: No module named 'aiosqlite'。 + "aiosqlite>=0.20,<1", ] [tool.setuptools.packages.find]