You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python包开发测试策略及本地模块发现等技术问题咨询

Python包开发相关问题解答

你的项目当前文件结构如下:

my_project/
  core/
    foo.py
    bar.py
    ...
  test/
    test_foo.py
    test_bar.py
  examples/
    example0.py

针对你提出的问题,逐一解答如下:

问题1:Python 3中是否需要__init__.py?是否只需顶层创建my_module.py列出核心模块?

Python 3.3+引入了命名空间包,这类特殊场景的包可以不用__init__.py,但常规本地开发的包,还是建议给core目录加上__init__.py:

  • 明确标识这是Python包,避免和普通目录混淆;
  • 可以在文件里导出核心模块的类/函数,简化用户调用(比如from my_project.core import Foo,不用写冗长的from my_project.core.foo import Foo);
  • 兼容部分老工具、测试框架,它们仍依赖__init__.py识别包结构。

至于顶层的my_module.py完全没必要,规范做法是给my_project根目录也加个__init__.py,把core作为子包,用户直接通过import my_project.core引用即可。

问题2:本地开发时让模块可被发现,无需每次修改都pip install的方法?

最符合Python风格的是可编辑安装:
先在my_project根目录创建pyproject.toml(遵循PEP 621标准,定义包名、版本、依赖等信息),然后执行:

pip install -e .

这会在Python环境里创建一个指向本地项目的链接,修改代码后直接运行example0.py就能生效,不用重复安装。

如果不想用pip,也可以临时给Python加路径:在example0.py开头加这段代码:

import sys
from pathlib import Path
sys.path.append(str(Path(__file__).parent.parent))

但这种方法只适合快速测试,长期开发还是推荐可编辑安装,避免污染路径。

问题3:单元测试文件如何让模块可被发现?

有三种常用方案:

  1. 配合可编辑安装:如果已经用pip install -e .装了包,测试文件直接import core.foo或from my_project.core import foo就能正常导入,不用额外操作;
  2. 临时添加路径:在测试文件开头加路径处理代码,和上面例子类似,把项目根目录加入sys.path;
  3. 用测试框架自动识别:比如用pytest的话,直接在项目根目录运行pytest,它会自动识别规范的包结构(带__init__.py),无需手动配置路径。

Python包开发与测试的常规策略

开发阶段

  • 规范包结构:除现有目录,添加顶层pyproject.toml定义包信息,替代传统的setup.py;
  • 用虚拟环境:每个项目单独建虚拟环境(python -m venv venv),激活后再装依赖和做可编辑安装,避免依赖冲突;
  • 代码风格管控:用black自动格式化代码,flake8检查风格问题,保证代码一致性;
  • 加类型提示:给函数、类加类型注解,用mypy做静态类型检查,提升代码可读性和健壮性。

测试阶段

  • 单元测试优先:每个核心模块对应一个测试文件,覆盖关键功能,用pytest做测试框架,比自带的unittest更简洁灵活;
  • 自动化测试:用pre-commit钩子,每次提交代码自动触发测试、格式检查;
  • 监控覆盖率:用pytest-cov生成覆盖率报告,确保核心代码都被测试覆盖;
  • 集成测试补充:针对多模块交互的功能,编写集成测试验证整体流程。

发布前准备

  • 写文档:用sphinx生成文档,模块、函数注释遵循Google或NumPy风格;
  • 版本管理:用语义化版本号(如v0.1.0、v0.1.1),用bump2version辅助管理;
  • 锁定依赖:用pip freeze > requirements.txt或poetry/pipenv管理依赖,保证安装环境一致。

内容的提问来源于stack exchange,提问作者fearless_fool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:55:23