10.1 Python 生态库的构建与发布 —— 从使用者到贡献者
Python 最大的魅力不是语言本身,而是它庞大而丰富的生态——超过 20 万个第三方库。但你知道吗:你写的代码也可以成为一个库,让别人 pip install 安装使用。这节不教你怎么用别人的库,而是教你怎么把自己的代码变成一个库。
🎯 本节要点:掌握模块和包的构建,了解如何发布自己的库
🔗 关联小程序: ch10_s10_1
一、模块——一个 .py 文件就是一个模块
模块(module)就是一整个 .py 文件。
# test.py —— 这是一个模块defadd(a, b):return a + bdefsubtract(a, b):return a - bPI = 3.14159
在其他文件中使用:
# main.py —— 使用模块import test # 导入 test 模块result = test.add(11, 22) # 使用模块中的函数print(result) # 33print(test.PI) # 3.14159(使用模块中的变量)
导入模块的多种方式
# 方式 1:import 模块名import testtest.add(1, 2)# 方式 2:from 模块名 import 函数名from test import addadd(1, 2) # 直接用,不需要 test. 前缀# 方式 3:起别名import test as tt.add(1, 2)# 方式 4:导入所有(不推荐)from test import * # 可能引起命名冲突
| | |
|---|
import test | | |
from test import func | | |
import test as t | | |
from test import * | | |
二、包——把相关模块组织起来
包(package)就是包含 __init__.py 的文件夹。
package_a/ # 包名 __init__.py # 包的标志文件 module.py # 包中的模块
包的导入
# 目录结构# package/# __init__.py# module.py# 方式 1:import 包.模块import package.modulepackage.module.func()# 方式 2:from 包 import 模块from package import modulemodule.func()# 方式 3:from 包.模块 import 函数from package.module import funcfunc()
多层包
package/ __init__.py package_a/ __init__.py module_a.py package_b/ __init__.py module_b.py
# 导入多层包from package.package_a import module_amodule_a.func()
三、__init__.py 的作用
当导入一个包时,__init__.py 会自动执行。它可以:
# package/__init__.pyprint("包已导入!")# 控制 from package import * 的内容__all__ = ['func1', 'func2']
四、发布你的库
写好的代码怎么让全世界的人都能 pip install?
步骤 1:准备目录结构
lib_test/ setup.py # 配置文件 package/ __init__.py module.py package_a/ __init__.py module_a.py package_b/ __init__.py module_b.py
步骤 2:编写 setup.py
from distutils.core import setupsetup( name = 'lib_test', # 包名 version = '1.0', # 版本号 description = 'function package', # 描述 author = 'itcast', # 作者 py_modules = ['package.module','package.package_a.module_a','package.package_b.module_b' ])
步骤 3:构建和发布
# 构建python setup.py build# 生成发布包python setup.py sdist# 安装到本地python setup.py install# 上传到 PyPI(需要注册账号)pip install twinetwine upload dist/*
小结
核心心法:模块和包是 Python 组织代码的基本单位。把相关功能封装成模块/包,代码更干净,也更容易复用。
下一节,我们来学习 Python 中常用的内置库。