0

0

Python 项目规模扩大后的组织方式

冷漠man

冷漠man

发布时间:2026-02-23 18:33:09

|

469人浏览过

|

来源于php中文网

原创

根本原因是 python 的 sys.path 未包含预期父目录;应统一用绝对导入、以项目根目录为基准,配合 __init__.py 和 python -m 启动,避免手动修改 sys.path。

python 项目规模扩大后的组织方式

模块拆分时 import 路径总报 ModuleNotFoundError

根本原因是 Python 的 sys.path 没包含你认为“理所当然”的父目录,不是路径写错了,而是解释器根本没去那里找。项目一深,from src.utils import helper 这种写法在不同执行位置(比如从根目录 run、从 tests 目录 run、用 pytest 执行)行为不一致。

实操建议:

  • 统一用绝对导入:所有 import 都基于项目根目录,根目录下必须有 __init__.py(哪怕空文件),并确保运行时当前工作目录是根目录(或通过 -m 方式启动)
  • 避免在代码里手动改 sys.path.append(...) —— 这会让模块位置变得隐式且难调试
  • python -m src.main 启动,而不是 python src/main.py;前者把 src 当作包,后者把它当脚本,加载机制完全不同
  • 如果必须支持多入口,用 setuptoolspyproject.toml 中的 [project.entry-points."console_scripts"],让 pip install -e . 后能直接调命令

什么时候该建子包而不是平铺一堆 .py 文件

不是看文件数量,而是看职责是否形成可复用、可隔离的语义单元。比如 auth 里混着数据库模型、HTTP 路由、密码策略,后期想抽出来给另一个项目用?不可能。但如果你把 auth/models.pyauth/providers.pyauth/exceptions.py 放一起,并对外只暴露 auth.get_user()auth.InvalidTokenError,那它就具备了子包价值。

判断信号:

立即学习Python免费学习笔记(深入)”;

CPWEB企业网站管理系统2.2 Beta
CPWEB企业网站管理系统2.2 Beta

CPWEB企业网站管理系统(以下称CPWEB)是一个基于PHP+Mysql架构的企业网站管理系统。CPWEB 采用模块化方式开发,功能强大灵活易于扩展,并且完全开放源代码,面向大中型站点提供重量级企业网站建设解决方案。CPWEB企业网站管理系统 2.2 Beta 测试版本,仅供测试,不建议使用在正式项目中,否则发生任何的后果自负。

下载
  • 多个模块频繁互相 from . import xxx,且外部几乎不直接引用内部模块 → 适合收进子包
  • __init__.py 开始承担“门面”职责:聚合导出接口、设置默认配置、触发初始化逻辑
  • 测试目录结构开始镜像源码结构(tests/auth/test_providers.py 对应 auth/providers.py)→ 结构已自然分层
  • CI 中想单独运行某块测试(如 pytest tests/auth),但当前平铺导致无法精准切分

setup.py 已淘汰,pyproject.toml 怎么配才算“生产可用”

很多团队配完 pyproject.toml 就以为万事大吉,结果别人 clone 下来 pip install -e . 报错,或者 CI 里依赖版本冲突。问题常出在三个字段没对齐:包发现方式、依赖声明粒度、Python 版本约束。

关键配置项和避坑点:

  • [build-system] 必须用 build-backend = "setuptools.build_meta"(别用 hatch 或 pdm 的 backend,除非全团队统一工具链)
  • [project] 下的 requires-python = ">=3.9" 要和 CI 环境、部署环境严格一致;dependencies 别写 requests>=2.25,而要写 requests>=2.25,,防止意外升级破坏兼容性
  • [project.optional-dependencies] 是解耦的好地方:比如 dev = ["pytest", "black"]aws = ["boto3"],用户按需装,不会让基础包变重
  • 别漏掉 [project.urls],尤其是 "Repository" = "https://..." —— 这是 pip show 时唯一能追溯来源的地方

大型项目里 __init__.py 不再只是“让目录变包”的占位符

它实际是模块 API 的第一道门禁。很多人留空或只写几行 from .xxx import yyy,结果用户 import mypkg 后得自己翻子模块,而 from mypkg import get_client 这种简洁用法根本不存在。

应该做的事:

  • 在顶层 __init__.py 中显式 re-export 核心类/函数,控制公共接口范围;内部模块名(如 _utilsinternal)加下划线前缀,不在 __all__ 里列,就是明确告诉使用者:“别依赖这个”
  • 利用 __getattr__ 延迟加载(Python 3.7+):对重型子模块(如含 C 扩展的 fastmath),首次访问才导入,避免 import mypkg 就触发全部初始化
  • __init__.py 末尾做轻量级检查:比如确认 os.getenv("ENV") 存在,或 warn 用户当前 Python 版本接近 EOL —— 错误提示比散落在各处更早、更集中

越大的项目,__init__.py 越不能“省事”。它不是语法要求,是 API 设计的一部分。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

351

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

426

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

789

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

362

2025.07.23

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1607

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

463

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2300

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

40

2026.01.19

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1127

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号