Python 包管理

1. PyPI

PyPI(Python Package Index)是 Python 语言的”应用商店”或”代码仓库”。

pip 是安装工具,从 PyPI 仓库中拉取包。


2. pip

基本命令

pip install requests          # 安装包
pip install requests==2.28.0  # 安装指定版本
pip install -r requirements.txt  # 从文件安装
 
pip uninstall requests        # 卸载包
pip list                      # 列出已安装的包
pip show requests             # 显示包信息
pip freeze > requirements.txt # 导出依赖

python -m pip

推荐使用 python -m pip 确保使用正确的 Python 环境:

python -m pip install requests

3. 虚拟环境

venv(Python 内置)

python -m venv .venv          # 创建虚拟环境
source .venv/bin/activate     # 激活(Linux/macOS)
.venv\Scripts\activate        # 激活(Windows)
deactivate                    # 退出虚拟环境

虚拟环境的作用

  • 隔离项目依赖
  • 避免版本冲突
  • 便于项目迁移

4. uv

参考:uv 中文文档

uv 是一个快速的 Python 包管理工具,由 Rust 编写,速度比 pip 快 10-100 倍。

安装

curl -LsSf https://astral.sh/uv/install.sh | sh

基本命令

uv init --name myproject      # 初始化项目
uv venv --python 3.12         # 创建虚拟环境
uv add requests               # 添加依赖
uv remove requests            # 移除依赖
uv sync                       # 同步依赖
uv run python script.py       # 运行脚本

uv vs pip

特性uvpip
速度快 10-100 倍
依赖解析更准确有时会有问题
虚拟环境内置支持需要 venv
锁文件自动生成需要额外工具

5. python -m 用法

以模块方式运行 Python 模块,而不是直接运行脚本文件。

语法:

python -m <模块> [参数...]

常见例子:

python -m http.server 8000       # 启动 HTTP 服务器
python -m pip install requests   # 运行 pip(推荐方式)
python -m venv .venv             # 创建虚拟环境
python -m pytest                 # 运行测试
python -m mypackage              # 运行自己的包

与直接运行脚本的区别:

方式示例特点
直接运行脚本python script.pyscript.py 当作普通脚本执行
-m 运行模块python -m scriptscript 当作模块导入后执行,会正确设置包上下文和 sys.path

注意: 不要加 .py 后缀


6. python -c 用法

直接在命令行中执行一段 Python 代码字符串。

语法:

python -c "Python 代码语句"

常见用法:

python -c "print('Hello, world!')"
python -c "import sys; print(sys.version)"
python -c "print(2**10)"
python -c "import numpy; print(numpy.__version__)"

python -m 的区别:

选项用途
python -c "code"直接执行一段 Python 代码字符串
python -m module运行一个已存在的 模块或包

7. requirements.txt

格式

requests==2.28.0
flask>=2.0.0
numpy>=1.20,<2.0
pandas  # 不指定版本

版本说明符

符号含义
==精确版本
>=大于等于
<=小于等于
>大于
<小于
~=兼容版本(如 ~=1.4.2 等价于 >=1.4.2,<1.5.0

8. pyproject.toml

现代 Python 项目的配置文件(PEP 517/518):

[project]
name = "myproject"
version = "0.1.0"
dependencies = [
    "requests>=2.28.0",
]
 
[project.optional-dependencies]
dev = [
    "pytest>=7.0.0",
    "black>=22.0.0",
]
 
[build-system]
requires = ["setuptools>=45"]
build-backend = "setuptools.build_meta"