一、包的基础概念与导入
1. 模块与包的关系
举个栗子🌰:
my_package/
├── __init__.py
├── utils.py
└── constants.py
- 单个
.py文件称为模块 - 包含
__init__.py的目录称为包
2. 标准导入方式
# 导入整个模块
import math
print(math.pi)
# 导入特定内容
from datetime import datetime
print(datetime.now())
# 导入并重命名
import numpy as np
注意⚠️:避免使用from module import *,会导致命名空间污染
二、自定义包开发实战
1. 基础包结构
# __init__.py 示例
__version__ = '1.0.0'
__all__ = ['utils'] # 控制*导入的内容
# 初始化逻辑
print(f"Initializing {__name__}")
# 子模块导入
from . import utils
2. 相对导入技巧
# 在子模块中引用同级模块
from . import constants
# 引用父级包内容
from .. import core_functions
划重点📌:相对导入只能在包内部使用,脚本文件(name == ‘main’)中不可用
三、常用第三方包大全
1. 数据处理三剑客
| 包名 | 用途 | 示例场景 |
|---|---|---|
| numpy | 数值计算 | 矩阵运算、科学计算 |
| pandas | 数据分析 | CSV处理、数据清洗 |
| matplotlib | 数据可视化 | 绘制折线图、柱状图 |
2. Web开发必备
# Flask示例
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hello World!"
3. 其他实用工具
requests:HTTP请求pillow:图像处理openpyxl:Excel操作pytest:单元测试
四、包管理高级技巧
1. 条件导入模式
try:
import orjson as json # 优先使用更快的实现
except ImportError:
import json
2. 延迟导入优化
def data_analysis():
import pandas as pd # 用时才导入
# 分析逻辑...
3. 动态导入黑科技
module_name = "math"
module = __import__(module_name)
print(module.sqrt(4))
五、pip完全使用手册
1. 基础命令
# 安装包
pip install package_name
# 指定版本
pip install pandas==1.3.0
# 升级包
pip install --upgrade package_name
2. 国内加速源
国内常用镜像站:
- 清华:https://pypi.tuna.tsinghua.edu.cn/simple
- 阿里:https://mirrors.aliyun.com/pypi/simple
- 腾讯:https://mirrors.cloud.tencent.com/pypi/simple
使用方式:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package_name
3. 环境管理
# 生成requirements.txt
pip freeze > requirements.txt
# 从文件安装
pip install -r requirements.txt
4. 高级操作
# 查看包详情
pip show pandas
# 检查过时包
pip list --outdated
# 卸载包
pip uninstall package_name
划重点📌:
- 生产环境务必固定版本号(使用==)
- 推荐使用虚拟环境隔离项目依赖
- requirements.txt应该包含所有直接依赖
注意⚠️:
- 不要混用不同源(可能导致依赖冲突)
- 安装失败时尝试添加
--trusted-host参数 - 公司内网可能需要配置代理
六、综合应用案例
案例1:自动化依赖检查
# check_deps.py
import subprocess
from pkg_resources import parse_version
def check_update(package):
current = subprocess.getoutput(f"pip show {package} | grep Version")
latest = subprocess.getoutput(f"pip index versions {package}")
return parse_version(current) < parse_version(latest)
if check_update("requests"):
print("建议升级requests包")
案例2:智能导入器
def smart_import(name):
try:
return __import__(name)
except ImportError:
print(f"自动安装缺失依赖: {name}")
import pip
pip.main(['install', name])
return __import__(name)
# 使用示例
np = smart_import("numpy")
案例3:包发布准备
- 创建
setup.py
from setuptools import setup
setup(
name="my_package",
version="0.1",
packages=["my_package"],
install_requires=["requests>=2.25"],
)
- 执行构建命令
python setup.py sdist bdist_wheel
总结路线图:
- 小工具 → 单文件模块
- 复杂项目 → 自定义包
- 团队共享 → 上传PyPI
- 生产部署 → 固定版本+虚拟环境

1245

被折叠的 条评论
为什么被折叠?



