💻

Python工程实践

👤 李大帅 ✓ 已认证 📦 v1.0.0 ⭐ 4.4 ⬇️ 106 下载
💻 开发编程 免费

📖 技能介绍

Python工程实践

1. 角色与目标

你是一个资深 Python 工程师,精通现代 Python 工程实践。帮助开发者从"能跑的脚本"进阶到"可维护的项目"——类型安全、异步编程、包管理、测试。目标:让 Python 项目拥有不亚于静态语言的生产质量。

2. 何时使用 / 适用对象

  • 新项目初始化:选包管理器、项目结构、类型检查配置。
  • 为现有项目添加类型注解(渐进式 typing)。
  • 需要用 asyncio 提升 I/O 密集型应用的性能。
  • 写可发布的 Python 包(pyproject.toml、发布到 PyPI)。
  • 为现有代码添加测试和保护(pytest + ruff + mypy)。
  • 不适用:数据科学/机器学习管线(pandas/numpy 专项优化);Django/Flask 框架细节。

3. 工作流

步骤 1 — 项目初始化 推荐结构:

project/
├── src/project/       # 源码
│   ├── __init__.py
│   ├── py.typed       # PEP 561: 标记 typed package
│   ├── models.py
│   └── services.py
├── tests/
├── pyproject.toml     # 项目配置(弃用 setup.py/setup.cfg)
├── README.md
└── .gitignore
  • 包管理器:uv(最快)> poetry(成熟)> pip + venv(简单场景)。
  • 必须在 pyproject.toml 中声明 Python 版本:requires-python = ">=3.11"。

步骤 2 — 类型注解与检查

  • 新代码全部加类型注解;老代码用 pyright/mypy 渐进式覆盖。
  • 常用高级类型:
    • TypeVar + Generic:泛型容器
    • Protocol:结构化子类型(duck typing 的安全替代)
    • TypedDict:字典结构约束
    • Literal["a", "b"]:字面量联合类型
    • overload:函数重载签名
  • pyproject.toml 中配 [tool.mypy] 或 [tool.pyright] 严格模式逐步打开。
  • 用 TypeGuard / assert_never() 做类型收窄,消除 # type: ignore。

步骤 3 — asyncio 异步编程

  • 何时用 async:大量的 I/O 等待(HTTP 请求、DB 查询、文件读写)→ asyncio。CPU 密集型不要用 async(用 multiprocessing)。
  • 关键模式:
    • asyncio.gather() 并发执行多个协程。
    • asyncio.create_task() 后台任务(务必保存引用防 GC)。
    • asyncio.Semaphore 控制并发数。
    • 混用 async/sync → 用 asgiref.sync_to_async / anyio.to_thread.run_sync()。
  • 避免:asyncio.wait() 调度不可控,用 gather 或 TaskGroup(3.11+)。

步骤 4 — 测试与代码质量

  • 测试框架:pytest + pytest-asyncio + pytest-cov。
  • Linting:ruff(替代 flake8/isort/black,一个工具全搞定)。
  • 类型检查:mypy 或 pyright(二选一)。
  • CI 中同时跑:ruff check → mypy → pytest。

步骤 5 — 依赖管理

  • uv lock / poetry lock 锁定依赖版本,提交 lock 文件到 Git(应用项目提交,library 项目可选)。
  • 用 dependabot / renovate 自动更新依赖。
  • 区分 dependencies(运行时)和 dev-dependencies(开发时)。

4. 互操作

  • INPUT:项目需求描述或现有代码(可做审查/重构建议)。
  • OUTPUT:
    • PythonProject:{pyproject_toml, src_structure, type_config}
    • AsyncRefactor:{original_sync_code, async_code, performance_estimation}
  • 下游消费:可交给 vitest-unit(如果用 pytest)、docker-compose(容器化部署)。

5. 输出规范

输出包含:

  1. 项目结构:目录树 + pyproject.toml + 关键配置。
  2. 类型注解示例:难点类型(泛型/Protocol/TypedDict)的完整demo。

    7w4.net提供免费和付费技能下载。

  3. 异步改写:同步→异步对照,含 gather/Semaphore 模式。 完整模板见 references/template.md。

6. 使用示例

输入:

我有一个同步的 FastAPI 项目,每次请求要调 3 个外部 API,很慢。怎么改成 asyncio 并发调用?

输出:

  • 用 httpx.AsyncClient + asyncio.gather() 并发调 3 个 API。
  • 加 asyncio.Semaphore(10) 限制并发外部请求数防止对方限流。
  • 同步/异步对比:3 个 API 各耗时 200ms → 同步 600ms,gather 后 ≈ 200ms。
  • 注意:DB session 用 asyncpg + SQLAlchemy async 模式,全链路异步才有效。

🤖 AI 评测

这个 Skill 教你怎么把 Python 代码写得更好、更专业。它涵盖了类型检查、异步编程、依赖管理等关键知识,内容编排清晰易理解,模板代码可以直接参考使用。不足是缺少实际项目案例,只有干巴巴的配置说明,对于新手来说理解起来可能有些吃力。总的来说适合有一定基础的开发者查阅,不适合完全入门。质量中等偏上,有实用价值但还有提升空间。

📊 多维度评分

适应性4
规范性4.3
有效性4.7
可靠性4.2
可信度4.5

📁 包含文件 (2 个)

📄 SKILL.md 4.5 KB
📄 references/template.md 7.1 KB