📅 Day 5 详细学习计划:Python软件包管理与虚拟环境
学习目标
✅ 掌握Python包管理工具(pip)核心用法
✅ 熟练使用虚拟环境(venv)隔离项目依赖
✅ 对比Python与Java(Maven/Gradle)的依赖管理差异
✅ 完成项目依赖管理与打包实战
一、Python包管理机制深度解析(1小时)
1.1 pip工具核心功能(对比Java的Maven)
功能 | pip命令 | Maven命令 |
---|---|---|
安装包 | pip install requests | mvn dependency:get |
卸载包 | pip uninstall requests | 手动删除pom.xml依赖 |
列出已安装包 | pip list | mvn dependency:list |
搜索包 | pip search "http client" | 通过中央仓库网站搜索 |
冻结依赖版本 | pip freeze > requirements.txt | mvn versions:display-dependency-updates |
1.2 虚拟环境(venv)原理
创建与激活:
# 创建虚拟环境(对比Java无直接对应机制)
python -m venv myenv
# 激活环境
# Windows:
myenv\Scripts\activate.bat
# Unix/macOS:
source myenv/bin/activate
文件结构解析:
myenv/
├── bin/ # 可执行文件(python, pip等)
├── include/ # C头文件
└── lib/ # 安装的第三方包
二、依赖管理实战(1小时)
2.1 典型工作流程
-
初始化项目
mkdir my_project && cd my_project python -m venv .venv source .venv/bin/activate
-
安装依赖
pip install requests==2.28.1 # 指定精确版本 pip install "flask>=2.0,<3.0" # 版本范围
-
生成依赖清单
pip freeze > requirements.txt
-
复现环境
pip install -r requirements.txt
2.2 高级依赖管理工具
工具 | 特点 | Java近似工具 |
---|---|---|
pip-tools | 生成精确版本锁文件 | Maven版本锁 |
poetry | 全生命周期管理(类似Gradle) | Gradle |
conda | 跨平台科学计算环境 | SDKMAN |
poetry示例:
# pyproject.toml(对比pom.xml)
[tool.poetry]
name = "myapp"
version = "0.1.0"
[tool.poetry.dependencies]
python = "^3.8"
requests = { version = "^2.28", extras = ["security"] }
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
三、打包与分发项目(1小时)
3.1 标准打包流程
项目结构:
my_package/
├── setup.py
├── pyproject.toml
└── my_package/
└── __init__.py
setup.py示例:
from setuptools import setup, find_packages
setup(
name="my_package",
version="0.1",
packages=find_packages(),
install_requires=["requests"],
entry_points={
'console_scripts': [
'mycli=my_package.cli:main'
]
}
)
构建与上传:
# 生成分发包(对比mvn package)
python -m build
# 上传到PyPI(类似Maven Central)
twine upload dist/*
3.2 现代打包标准(PEP 621)
# pyproject.toml
[project]
name = "my_package"
version = "0.1.0"
dependencies = ["requests>=2.28"]
[project.scripts]
mycli = "my_package.cli:main"
四、实战项目:API客户端开发(1小时)
4.1 项目需求
-
开发一个GitHub API客户端
-
功能:获取用户仓库列表
-
依赖:
requests
库 -
打包为可安装模块
4.2 分步实现
步骤1:初始化环境
mkdir github_client && cd github_client
python -m venv .venv
source .venv/bin/activate
步骤2:安装依赖
pip install requests
pip freeze > requirements.txt
步骤3:编写代码
# github_client/client.py
import requests
class GitHubClient:
def __init__(self, token=None):
self.base_url = "https://api.github.com"
self.headers = {"Authorization": f"Bearer {token}"} if token else {}
def get_user_repos(self, username):
url = f"{self.base_url}/users/{username}/repos"
response = requests.get(url, headers=self.headers)
response.raise_for_status()
return response.json()
步骤4:打包配置
# pyproject.toml
[project]
name = "github_client"
version = "0.1.0"
dependencies = ["requests>=2.28"]
步骤5:安装测试
pip install .
python -c "from github_client import GitHubClient; print(GitHubClient().get_user_repos('torvalds'))"
五、Java开发者注意事项
-
依赖范围差异
-
Python无
provided
作用域,通过extras
实现可选依赖
[project.optional-dependencies] dev = ["pytest", "black"]
-
-
多模块管理
-
Python通过
namespace packages
实现,需在__init__.py
中声明
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
-
-
依赖冲突解决
-
使用
pipdeptree
分析依赖树
pip install pipdeptree pipdeptree --warn silence
-
六、扩展练习
-
依赖安全审计
pip install safety safety check -r requirements.txt
-
私有仓库配置
# ~/.pip/pip.conf [global] extra-index-url = https://private.pypi.com/simple
-
Docker集成
FROM python:3.10-slim COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD ["python", "main.py"]
通过第五天的学习,您将掌握Python生态的依赖管理精髓,关键要点:
1️⃣ 虚拟环境是项目隔离的必备工具
2️⃣ requirements.txt
是最基础的依赖管理方式,但pyproject.toml
是未来趋势
3️⃣ 打包分发机制与Java有显著差异,需重点理解setup.py
与__init__.py
的作用
本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。