一个标准的包结构示例:

my_package/          # 包目录
├── __init__.py      # 包的初始化文件(必须有,空文件也可)
├── module1.py       # 子模块1
├── module2.py       # 子模块2
├── sub_package/     # 子包
    ├── __init__.py
    ├── module3.py

包的导入方式

  • 导入子模块

import my_package.module1
my_package.module1.func1()  # 调用 module1 中的 func1 函数

# 带别名
import my_package.module1 as m1
m1.func1()
  • 从包中导入子模块

from my_package import module2
module2.func2()
  • 从包的子模块中导入功能

__init__.py 的作用

  • 标识文件夹为 Python 包(无此文件则无法作为包导入)。

  • 可定义包的公共接口(控制 from 包 import * 时导出的内容):

此时可以直接:

模块的高级用法

模块的特殊变量

变量名
作用

__name__

模块名:如果模块是主程序执行,值为 __main__;如果被导入,值为模块名

__file__

模块的绝对路径(返回字符串)

__doc__

模块的文档字符串(模块开头的 """注释""")

__package__

模块所属的包名(无包则为 None)

常用场景 __name == "__main__"用于区分模块是被导入还是直接执行。常用于模块测试:

相对导入和绝对导入

  • 绝对导入(推荐):基于项目根目录

  • 相对导入:基于当前包位置,用.表示当前目录

相对导入只在包内模块使用,不能直接在脚本入口使用。

安装和发布包

  • 本地安装包:

  • 构建与发布(推荐使用setuptoolspoetry)

常见元数据文件:

  • setup.py / pyproject.toml → 包的配置

  • requirements.txt → 依赖

  • MANIFEST.in → 控制打包时包含的文件

最后更新于