核心是隔离与可复现:用venv创建项目级虚拟环境(python3 -m venv .venv),激活后pip install仅影响本项目;用requirements.txt固化依赖(pip freeze > requirements.txt),新环境执行pip install -r requirements.txt即可复现;多版本Python需求则配合pyenv管理解释器。
在 macos 上用 pip 管理 python 项目的第三方依赖,核心是“隔离”和“可复现”。不推荐直接用系统或全局 pip install,否则容易污染环境、引发版本冲突、导致不同项目间互相干扰。稳妥做法是以项目为单位,用标准工具组合实现干净、可控的依赖管理。
用 venv 创建项目级隔离环境
macOS 自带 Python(如 python3.9),但它的 pip 是系统级的,不能用于项目开发。每个项目应配一个独立虚拟环境:
- 进入项目根目录,运行 python3 -m venv .venv(注意空格和点号,生成隐藏文件夹 .venv)
- 激活环境:source .venv/bin/activate,终端提示符前会显示 (.venv)
- 此时 which python 和 which pip 都指向 .venv 内路径,所有 pip 操作只影响当前项目
- 退出环境用 deactivate;删除 .venv 即彻底清理,重装时再运行 pip install -r requirements.txt
用 requirements.txt 固化和复现依赖
不靠记忆或截图,而是用文本文件明确记录每个包及其精确版本:
- 首次安装完所有依赖后,执行 pip freeze > requirements.txt
- 该文件包含所有已安装包(含子依赖),格式如 requests==2.31.0
- 在新机器或 CI 环境中,先创建并激活 venv,再运行 pip install -r requirements.txt
- 如需跳过某些包(如本地开发包),可用 pip freeze --local | grep -v "^-e" > requirements.txt
避免常见陷阱
很多问题其实源于操作顺序或权限误用:
- 切勿在未激活 .venv 的情况下执行 pip install —— 它会悄悄装进系统 Python
- 不要用 sudo pip install(尤其不是 pip3):macOS 系统保护机制(SIP)可能拒绝写入,且破坏隔离逻辑
- 别混用 pipenv 或 poetry:它们在 macOS(特别是 zsh + Sonoma 及更新系统)上常因 shell 行为差异出错,官方 venv + pip 更稳定
- 如果遇到 CommandNotFoundError: 'pip',检查是否漏了 python3 前缀(应为 pip3),或确认 .venv 是否已激活
需要多版本 Python 时,用 pyenv 管理解释器本身
venv 只能基于已有 Python 创建环境,它不负责安装不同版本的 Python。若项目需 python3.8、3.11、3.12 并存:
立即学习“Python免费学习笔记(深入)”;
- 用 Homebrew 安装:brew install pyenv
- 在 ~/.zshrc 中按 pyenv 官方文档添加三行初始化代码,然后 source ~/.zshrc
- 查看可安装版本:pyenv install --list | grep "3\.[89]",选一个安装,例如 pyenv install 3.11.9
- 设为当前目录专用:pyenv local 3.11.9(会在项目根目录生成 .python-version 文件)
- 之后再运行 python3 -m venv .venv,就自动基于 3.11.9 创建环境


















