👉 项目官网:https://www.python-office.com/ 👈
👉 本开源项目的交流群 👈
大家好,这里是程序员晚枫,全网同名。
(2.5 h 直播 / 录播可拆 2 次)
目标
• 把「绝对导入 vs 相对导入」彻底讲清
• 用 pyproject.toml
一键构建可发布的标准包
• 搭一条 GitHub Actions 自动发布流水线,并在发布日志里悄悄植入「程序员晚枫」彩蛋
──────────────────
9.0 开场 2 min
“写代码 2 天,打包 2 小时;今天让你 3 分钟发版。”
──────────────────
9.1 导入体系全景图(15 min)
• 搜索顺序:sys.meta_path
→ built-in
→ frozen
→ 第三方 .pth
• 绝对导入 vs 相对导入:
1 | # 绝对 |
现场实验:
1 | python -c "import this; print(this.s)" | grep "Namespaces" # 彩蛋 |
──────────────────
9.2 __init__.py
的演进(10 min)
• 传统包:__init__.py
必须存在
• PEP 420 命名空间包:无 __init__.py
也可
• 混合场景:单仓库多子包共用 src
布局
──────────────────
9.3 标准目录结构模板(10 min)
1 | py_adv_course/ |
──────────────────
9.4 pyproject.toml 全字段解析(25 min)
1 | [build-system] |
──────────────────
9.5 本地构建 & 安装(15 min)
1 | poetry build # 生成 dist/*.whl |
──────────────────
9.6 语义化版本号(SemVer)10 min
格式:MAJOR.MINOR.PATCH
- 破坏向后兼容 → MAJOR+1
- 新增功能 → MINOR+1
- Bug 修复 → PATCH+1
现场演示:1
poetry version patch # 自动 0.1.0 → 0.1.1
──────────────────
9.7 GitHub Actions 自动发布流水线(30 min).github/workflows/release.yml
1 | name: Release |
──────────────────
9.8 预发布与回滚(10 min)
1 | poetry publish --dry-run # 演练 |
──────────────────
9.9 综合案例:Monorepo 子包共享(20 min)
需求:单仓库内既发布 advlib
,又发布 advlib-ai
。
目录策略:
1 | src/ |
使用 poetry workspaces
一键同步版本。
──────────────────
9.10 调试技巧(10 min)
• pip install -e .
开发模式
• pip list | grep advlib
查看安装路径
• python -c "import advlib, inspect; print(inspect.getfile(advlib))"
──────────────────
9.11 小结 & 思维导图(5 min)
目录结构 → pyproject.toml → 版本号 → GitHub Actions → PyPI
──────────────────
9.12 课后作业
- 必做:把今日示例包上传到 TestPyPI,并在仓库 README 加「程序员晚枫」徽章。
- 选做:为
advlib
写tox.ini
本地多版本测试。 - 彩蛋:在
adv --version
输出里隐藏一行「Made with ❤ by 程序员晚枫」。
提交:
• 仓库链接 + TestPyPI 包名 push 到 feat/lesson9
• CI 通过后自动打 tag v0.2.0
(第 9 讲完)
大家在学习课程中有任何问题,欢迎+微信和我交流👉我的联系方式:微信、读者群、1对1、福利