一、学前花絮
之前我们用python编写了一个“学习管理”的界面,这个程序虽然不长,但很经典。我们正好借这个程序的结构,说明一下python关于工程项目是如何管理的。
“学习管理”这个程序的结构如下:

程序框架
以上目录的说明:
- study_manager 是一个目录,也是整个项目的根目录。
- Study不仅是目录,更是一个python包。它与目录的区别在于包含了__init__.py这个初始化文件。
- Venv目录是虚拟环境,可以把项目运行需要的第三方依赖包都放在这里。便于后来移植到其他机器上。
- README.md 属于关于项目的说明性文件。让别人了解项目是干什么的。
二、python的包管理,与__init__.py介绍
下面用 一个最小但真实的 project 把两件事一次讲清:
Python 包管理(__init__.py 到底干什么的)
自定义模块怎么导入、跨目录导入不报错。
2.1 __init__.py的三种实用写法
a) 空文件 —— 仅仅“把目录标记成包”,Python 3 允许不写,但提议保留,显式优于隐式。
b) 控制导出 —— 限制 from study import * 能带走哪些名字:

控制导出
c) 缩短导入路径(最常用):

包导入
这样 包外 就可以:
|
import study.ui as ui # 而不是 import study.ui.ui |
2.2包内模块如何相互导入
规则:包内一律用相对导入(前面带 .)。
例子:ui.py 里要实例化 DB 类

界面程序
2.3 从“项目根”启动,而不污染全局环境
在“项目根”建一个 main.py 入口,只负责跑包:

主程序
2.4 命令行一键运行(无需安装)
|
cd study_manager # 进到项目根 python -m study.main # -m 把当前目录当成“顶级包” |
好处:
不需要把 study 装进 site-packages
相对导入不会崩(Python 自动识别 -m 包路径)
2.5 进阶:可编辑安装(pip install -e)
如果希望 任意位置 都能 import study,在项目根加 pyproject.toml(或旧版 setup.py):
|
# pyproject.toml [build-system] requires = [“setuptools”] build-backend = “setuptools.build_meta” [project] name = “study” version = “0.1.0” |
然后:
|
python -m venv venv source venv/bin/activate #Windows: venvScriptsactivate pip install -e . # “可编辑”安装,改代码立即生效 |
三、小结
一句话总结python关于包的管理:
- 想“目录变包”→ 放 __init__.py
- 包内相互 import → 用 . 相对导入
- 包外运行 → python -m 包.模块 或 pip install -e .
让我们保持学习热烈,多做练习。我们下期再见!

快乐男孩
#python#
好好学习
收藏了,感谢分享