
学习目标 ✅ 掌握Python包管理工具(pip)核心用法 ✅ 熟练使用虚拟环境(venv)隔离项目依赖 ✅ 对比Python与Java(Maven/Gradle)的依赖管理差异 ✅ 完成项目依赖管理与打包实战
功能 | 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 |
创建与激活:
# 创建虚拟环境(对比Java无直接对应机制)
python -m venv myenv
# 激活环境
# Windows:
myenv\Scripts\activate.bat
# Unix/macOS:
source myenv/bin/activate 文件结构解析:
myenv/
├── bin/ # 可执行文件(python, pip等)
├── include/ # C头文件
└── lib/ # 安装的第三方包 初始化项目
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 工具 | 特点 | 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" 项目结构:
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/* # pyproject.toml
[project]
name = "my_package"
version = "0.1.0"
dependencies = ["requests>=2.28"]
[project.scripts]
mycli = "my_package.cli:main" requests库
步骤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'))" 依赖范围差异
provided作用域,通过extras实现可选依赖
[project.optional-dependencies]
dev = ["pytest", "black"] 多模块管理
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的作用
本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。