Python 模块详解
模块概念与分类
模块(Module) 一个 Python 文件(.py
)就是一个模块,内部可包含 变量、函数、类 等,可供其他模块或文件导入使用。
模块分类:
- 内建模块(builtins) 由 Python 解释器内置,随时可用,如
len()
、abs()
等。 - 标准库模块 Python 安装时自带,如
math
、time
等。 - 第三方模块 需手动安装,例如
requests
、numpy
。 - 用户自定义模块 自己编写的
.py
文件,或可封装为第三方包发布。
pip 模块管理
常用 pip 命令:
功能 | 命令示例 |
---|---|
安装模块 | pip install module_name |
查看所有模块 | pip list |
更新单个模块 | pip install --upgrade module_name |
更新所有模块(需 pip-review) | pip-review --local --interactive |
指定镜像源安装 | pip install module_name -i https://pypi.tuna.tsinghua.edu.cn/simple |
国内镜像源常用:
- 阿里云:
http://mirrors.aliyun.com/pypi/simple/
- 清华:
https://pypi.tuna.tsinghua.edu.cn/simple/
- 豆瓣:
http://pypi.douban.com/simple/
- 中国科技大学:
https://pypi.mirrors.ustc.edu.cn/simple/
永久更改镜像:
- Linux:编辑或新建
~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
- Windows:在
C:\Users\你的用户名\pip\pip.ini
写入:
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
pip 缓存管理
- 查看缓存信息
pip cache info
- 查看缓存列表
pip cache list
- 查看缓存目录
pip cache dir
- 清除缓存
pip cache purge
和conda clean --all
- 直接删除缓存文件夹:
- Windows:
C:\Users\你的用户名\AppData\Local\pip\cache
- Linux:
~/.cache/pip
- Windows:
模块导入与使用
基本导入
import module_name # 导入整个模块
import module_name as alias # 使用别名
from module_name import func # 导入模块中某个函数
from module_name import * # 导入所有内容(不推荐)
示例 - 内建模块 math
import math
print(math.sqrt(16)) # 平方根
print(abs(-5)) # 绝对值
print(math.pi) # 圆周率
包(Package)
概念:包是一个包含多个模块的文件夹,必须存在 __init__.py
文件(即使为空),用于标识该文件夹是一个包。
目录结构示例
project/
│─ test.py
└─ package_runoob/
│─ __init__.py
│─ runoob1.py
└─ runoob2.py
模块调用示例
# test.py
from package_runoob.runoob1 import runoob1
from package_runoob.runoob2 import runoob2
runoob1()
runoob2()
注意:
__init__.py
可用于包初始化或定义__all__
控制from package import *
导入内容。- 相对导入:
.
当前目录..
上一级目录
模块搜索路径(sys.path)
Python 导入顺序:
- 当前目录
sys.path
指定的路径- 内置模块位置(通常
/usr/local/lib/pythonX.X/
)
查看搜索路径:
import sys
print(sys.path)
模块加载与编译缓存
.py
→.pyc
(编译后的字节码).pyc
会生成于__pycache__
目录,下次导入直接加载(提高性能)。
模块特殊属性
属性 | 说明 |
---|---|
__doc__ |
文档字符串 |
__file__ |
模块文件路径 |
__name__ |
模块名(若为主模块,则为 "__main__" ) |
__all__ |
from module import * 时可导出的内容列表 |
例如
# bk.py
__all__ = ['hello1']
def hello1(): ...
def hello2(): ...
from bk import *
只会导入 hello1
。
动态加载与工具函数
- 重新加载模块
import importlib
importlib.reload(module_name)
- help() 查看文档
- dir() 列出模块成员
- globals() / locals() 获取全局/局部命名空间字典
创建并发布 pip 包
注册账号
如果你还没有PyPI账号,请访问 PyPI官网 注册一个账号。
目前PyPi强制要求双因素认证(2FA),这一变化虽然提高了安全性,但也给日常工作带来了麻烦。
第一步:配置恢复代码
请妥善保存这些代码,它们是你在遇到问题时重置 2FA 的关键!
第二步:添加 2FA
安装 Python 包 pyotp 来生成 2FA 验证码。复制应用代码,并编写 Python 脚本获取验证码。
import pyotp
key = '粘贴 2FA 代码'
totp = pyotp.TOTP(key)
print(totp.now())
步骤
- 准备项目文件(源码 +
setup.py
+README.md
+ LICENSE) setup.py
示例:
from setuptools import setup, find_packages
setup(
name="your_package_name",
version="0.1.0",
description="A short description",
long_description=open('README.md', encoding='utf-8').read(),
long_description_content_type='text/markdown',
author="Your Name",
packages=find_packages(),
python_requires='>=3.6'
)
- 安装工具:
pip install setuptools wheel twine build
- 构建:
python -m build
这会在 dist 目录下生成 .tar.gz
和 .whl
文件。
- 上传到 PyPI:
twine upload dist/*
此时会提示你输入PyPI的用户名和密码或者API。上传成功后,你的包就会在PyPI上可用了。
- 测试上传到 TestPyPI
在正式上传到PyPI之前,可以先上传到 TestPyPI 进行测试:
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
你需要在 TestPyPI 上注册一个账号,注册地址:TestPyPI。
需要输入API Token,我们把API Token复制到剪切板,然后点击输入密码的地方右键就行,不用Ctrl+C
- 安装或升级你的包
上传成功后,可以用 pip 安装并测试你的包:
pip install [--upgrade] -i https://test.pypi.org/simple/ your_package_name
通过这些步骤,你应该能够成功地将自己的Python包上传到PyPI。