python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Mac中Python环境管理实践

Mac电脑中Python环境的管理与实践完整案例

作者:Dshuishui

Python是一门跨平台的编程语言,在我们所熟知的Windows以及macOS等系统中都能使用Python进行程序开发,这篇文章主要介绍了Mac电脑中Python环境管理与实践的相关资料,需要的朋友可以参考下

前言:一个真实的问题引发的思考

前几天,我在整理自己 Mac 电脑的 Python 环境时,遇到了一个让人困惑的问题:

(chatgpt-on-wechat) cong@MacBook-Pro % which python
/opt/anaconda3/envs/chatgpt-on-wechat/bin/python

(chatgpt-on-wechat) cong@MacBook-Pro % which python3
/usr/bin/python3

明明已经激活了 Conda 环境,python 命令指向了正确的环境路径,但 python3 却还是指向系统的 /usr/bin/python3。这意味着如果我在项目中使用 python3 来运行脚本,实际上用的根本不是我精心配置的 Conda 环境。

经过一番排查,发现问题出在 ~/.zshrc 配置文件中的 PATH 优先级设置。这个小插曲让我意识到:Mac 上的 Python 环境管理,远比想象中复杂。系统自带的、Homebrew 安装的、Conda 管理的,再加上 pythonpython3 的区别、pippip3 的差异……如果没有一个清晰的认知框架,很容易在各种环境中迷失。

这篇文章就来系统地聊聊 Mac 上 Python 环境管理的方方面面,希望能帮助你建立清晰的认知,避免踩坑。文末会详细说明开头这个问题的完整排查和解决过程。

一、Mac 系统自带的 Python

历史背景与现状

早期的 macOS(10.15 Catalina 及之前)会预装 Python 2.7,路径通常在 /usr/bin/python。这是因为 macOS 的一些系统工具和脚本依赖 Python 运行。

从 macOS 12.3 开始,Apple 移除了预装的 Python 2.7。现在的 macOS 只保留了一个「桥接」机制:当你在终端输入 python3 时,如果系统检测到没有安装 Python,会提示你安装 Xcode Command Line Tools,安装后会得到一个位于 /usr/bin/python3 的 Python。

# 查看系统 Python
/usr/bin/python3 --version
# Python 3.9.6 (取决于你的 macOS 版本)

为什么不推荐用于开发

系统自带的 Python 存在几个问题:

  1. 版本滞后:系统 Python 的版本由 Apple 控制,通常比较老旧,且不会频繁更新
  2. 权限受限:安装第三方包时可能遇到权限问题,需要 sudo,这不是好习惯
  3. 可能影响系统:虽然现代 macOS 的系统 Python 相对独立,但在系统级目录安装包仍有风险
  4. 不可控:macOS 升级时可能会重置或修改系统 Python 环境

什么时候可以用

说实话,几乎没有场景需要直接使用系统 Python 进行开发。它存在的意义更多是为了系统兼容性。唯一的例外可能是运行一些简单的一次性脚本,且你不想安装任何额外工具。

二、Conda(Anaconda / Miniconda)中的 Python

Conda 是什么

Conda 是一个跨平台的包管理器和环境管理器,最初由 Anaconda 公司开发,主要面向数据科学和科学计算领域。它有两个发行版:

发行版特点大小适合人群
Anaconda完整版,预装大量科学计算包(NumPy、Pandas、Jupyter 等)~3GB数据科学初学者、想开箱即用
Miniconda精简版,只包含 Conda 和 Python,按需安装~50MB想精细控制、节省空间的用户

Miniconda 安装教程(推荐)

对于大多数用户,我推荐安装 Miniconda——轻量、灵活,需要什么装什么。

第一步:下载安装包

访问 Miniconda 官网下载页面:https://docs.conda.io/en/latest/miniconda.html

或者直接用命令行下载(推荐):

# Apple Silicon Mac (M1/M2/M3/M4)
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh

# Intel Mac
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh

💡 如何判断你的 Mac 是哪种芯片?
点击左上角 → 「关于本机」,查看「芯片」或「处理器」信息。

第二步:运行安装脚本

# Apple Silicon Mac
bash Miniconda3-latest-MacOSX-arm64.sh

# Intel Mac
bash Miniconda3-latest-MacOSX-x86_64.sh

安装过程中会有几个提示:

  1. 阅读许可协议:按 Enter 翻页,输入 yes 同意
  2. 安装位置:默认是 /opt/anaconda3~/miniconda3,直接按 Enter 使用默认值即可
  3. 初始化 Conda:输入 yes,这会自动配置你的 shell

第三步:重启终端并验证

关闭当前终端,重新打开一个新终端:

# 验证安装
conda --version
# conda 24.x.x

# 查看 Python 路径
which python
# /opt/anaconda3/bin/python

python --version
# Python 3.12.x

如果看到类似输出,说明安装成功!

第四步:配置国内镜像(可选但推荐)

国内用户建议配置清华镜像源,加速包下载:

# 配置 conda 镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

# 配置 pip 镜像
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

Conda Python 的安装路径

安装完成后,Conda 相关文件的位置:

# Conda 主目录(base 环境)
/opt/anaconda3/
├── bin/
│   ├── python          # base 环境的 Python
│   ├── python3         # 同上
│   ├── pip
│   └── conda
├── envs/               # 所有虚拟环境都在这里
│   ├── myproject/      # 环境: myproject
│   └── chatgpt-on-wechat/  # 环境: chatgpt-on-wechat
└── ...
# 查看实际路径
which python
# /opt/anaconda3/bin/python  (base 环境)

conda activate myproject
which python
# /opt/anaconda3/envs/myproject/bin/python  (myproject 环境)

Conda 基本使用

# 创建新环境(指定 Python 版本)
conda create -n myproject python=3.11

# 查看所有环境
conda env list

# 激活环境
conda activate myproject

# 退出当前环境
conda deactivate

# 删除环境
conda env remove -n myproject

# 在环境中安装包
conda activate myproject
conda install numpy pandas jupyter

# 导出环境配置(便于分享)
conda env export > environment.yml

# 从配置文件创建环境
conda env create -f environment.yml

Conda 环境的优势

  1. 依赖隔离:每个环境有独立的包,不会相互污染
  2. 版本自由:可以为不同项目创建不同 Python 版本的环境
  3. 跨语言支持:Conda 不只管理 Python,还能管理 R、Node.js 等
  4. 二进制包:Conda 的包是预编译的,安装 NumPy、TensorFlow 等通常比 pip 更顺畅

适合使用 Conda 的场景

三、Homebrew 安装的 Python

Homebrew 的定位

Homebrew 是 macOS 上最流行的包管理器,被称为「macOS 缺失的包管理器」。它主要用于安装各种命令行工具和开发依赖。

安装 Homebrew(如果还没有)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装后根据提示配置 PATH。

通过 Homebrew 安装 Python

# 安装最新版 Python
brew install python

# 或安装指定版本
brew install python@3.11
brew install python@3.12

Homebrew Python 的路径

# Apple Silicon Mac
/opt/homebrew/bin/python3
/opt/homebrew/bin/pip3

# Intel Mac  
/usr/local/bin/python3
/usr/local/bin/pip3

Homebrew Python 的特点

  1. 版本较新:Homebrew 会及时更新 Python 版本
  2. 与系统隔离:不会影响系统 Python
  3. 没有环境管理:Homebrew 本身不提供虚拟环境功能,需要配合 venv 使用
  4. 可能被其他工具依赖:一些 Homebrew 安装的工具会依赖 Homebrew Python

配合 venv 使用

# 创建虚拟环境
python3 -m venv .venv

# 激活
source .venv/bin/activate

# 安装依赖
pip install -r requirements.txt

# 退出
deactivate

适合使用 Homebrew Python 的场景

四、多 Python 共存时的使用策略

理解它们的关系

在一台 Mac 上,完全可能同时存在这三种 Python:

# 系统 Python
/usr/bin/python3

# Homebrew Python
/opt/homebrew/bin/python3

# Conda Python(base 环境)
/opt/anaconda3/bin/python

# Conda Python(某个具体环境)
/opt/anaconda3/envs/myenv/bin/python

它们是完全独立的 Python 安装,有各自的包目录、各自的 pip。

关键在于:当你执行 pythonpython3 时,系统通过 PATH 环境变量决定使用哪一个。PATH 中排在前面的目录会被优先搜索。

如何判断当前使用的是哪个 Python

# 查看 python3 的路径
which python3

# 查看 python 的路径  
which python

# 查看 Python 版本和详细路径
python3 -c "import sys; print(sys.executable)"

# 查看 PATH 中所有的 python3
type -a python3

# 查看 PATH 顺序
echo $PATH | tr ':' '\n'

不同项目应如何选择

项目类型推荐方案理由
系统脚本、自动化Homebrew Python + venv轻量、稳定
数据分析、机器学习Conda 环境依赖管理方便,包兼容性好
Web / 后端项目Homebrew Python + venv 或 Conda取决于团队习惯
临时脚本、学习测试当前激活的任何环境怎么方便怎么来
需要特定 Python 版本Conda 环境版本切换最灵活

五、python和python3的区别与使用建议

历史背景

这要从 Python 2 和 Python 3 的分裂说起。Python 3 在 2008 年发布,与 Python 2 不完全兼容。为了让两个版本共存,社区约定:

这个约定延续至今,尽管 Python 2 已经在 2020 年停止维护。

在 Mac 上的现状

现在的 macOS 上:

但问题在于:如果你的 PATH 配置不当(就像我开头遇到的问题),pythonpython3 可能指向不同的解释器。

建议

  1. 日常开发中,建议统一使用 python(确保在正确的虚拟环境中)
  2. 写脚本的 shebang 时,使用 #!/usr/bin/env python3,这样会使用 PATH 中的 python3
  3. 遇到不确定时,先用 which pythonwhich python3 确认路径

六、pip和pip3的区别与正确用法

基本对应关系

理论上:

但实际情况复杂得多。在不同环境下,它们可能指向不同的位置,也可能指向同一个。

常见误区

最常见的错误是:在虚拟环境中使用了全局的 pip

# 你以为安装到了 Conda 环境
pip install requests

# 但实际上可能安装到了系统 Python
which pip
# /usr/bin/pip3  ← 错误!

最佳实践:使用python -m pip

为了避免混淆,强烈建议使用这种方式安装包:

# 确保使用当前 Python 对应的 pip
python -m pip install requests

# 或者在 Conda 环境中
conda activate myenv
python -m pip install requests

python -m pip 的含义是:使用当前 python 命令对应的解释器来运行 pip 模块。这样就不会出现「pip 和 python 对应不上」的问题。

在 Conda 环境中

Conda 有自己的包管理命令:

# 推荐:使用 conda 安装
conda install numpy

# 也可以用 pip(在 Conda 环境中)
python -m pip install some-package

一般建议:能用 conda install 的就用 Conda,只有 Conda 没有的包才用 pip。

七、项目级 Python 环境管理最佳实践

为什么每个项目都应该有独立环境

这是 Python 开发的黄金法则:永远不要在全局环境中开发项目

原因很简单:

Conda env vs venv 的选择

特性Conda envvenv
Python 版本管理✅ 可以指定任意版本❌ 只能用当前安装的版本
包管理Conda + pip只有 pip
体积较大较小
创建速度较慢
适合场景数据科学、复杂依赖Web 开发、轻量项目

标准工作流程示例

使用 Conda:

# 创建环境
conda create -n myproject python=3.11

# 激活环境
conda activate myproject

# 安装依赖
conda install numpy pandas
python -m pip install some-other-package

# 导出环境(便于他人复现)
conda env export > environment.yml

# 从文件创建环境
conda env create -f environment.yml

使用 venv:

# 创建环境(在项目目录下)
python3 -m venv .venv

# 激活环境
source .venv/bin/activate

# 安装依赖
python -m pip install -r requirements.txt

# 导出依赖
python -m pip freeze > requirements.txt

Mac 新手的环境管理「避坑清单」

  1. 不要用 sudo pip install:这会把包装到系统目录,造成混乱
  2. 不要在 base 环境工作:Conda 的 base 环境应该保持干净
  3. 激活环境后再装包:确认 which python 指向正确路径
  4. 项目目录下保留环境配置文件requirements.txtenvironment.yml
  5. 定期清理不用的环境conda env list 查看,conda env remove -n name 删除

八、常见问题排查

问题:python和python3指向不同路径(本文开头的问题)

这是我在整理环境时遇到的真实问题,这里详细记录排查和解决过程。

问题现象

激活 Conda 环境后,pythonpython3 指向不同的解释器:

(chatgpt-on-wechat) cong@MacBook-Pro % which python
/opt/anaconda3/envs/chatgpt-on-wechat/bin/python  ← 正确

(chatgpt-on-wechat) cong@MacBook-Pro % which python3  
/usr/bin/python3  ← 错误!应该也指向 conda 环境

排查步骤

第一步:检查 Conda 环境中是否有 python3

ls -la /opt/anaconda3/envs/chatgpt-on-wechat/bin/python*

输出显示 python3 软链接是存在的:

lrwxr-xr-x  python -> python3.9
lrwxr-xr-x  python3 -> python3.9
-rwxr-xr-x  python3.9

第二步:检查 PATH 顺序

echo $PATH | tr ':' '\n' | head -20

发现问题:Conda 环境路径排在 /usr/bin 后面:

/Users/cong/go/bin
/opt/homebrew/bin
...
/usr/bin              ← 第9位
...
/opt/anaconda3/envs/chatgpt-on-wechat/bin  ← 第18位,太靠后了!

第三步:检查 shell 配置文件

cat ~/.zshrc
cat ~/.zprofile

发现 ~/.zprofile 中有:

eval $(/opt/homebrew/bin/brew shellenv)

/etc/zprofile 中有:

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

问题根因

macOS 的 shell 配置文件加载顺序是:

/etc/zprofile → ~/.zprofile → ~/.zshrc
  1. /etc/zprofile 中的 path_helper 会把系统路径(如 /usr/bin)放到前面
  2. ~/.zprofile 中的 brew shellenv 也会修改 PATH
  3. ~/.zshrc 中如果有 typeset -U path(zsh 的路径去重),会阻止 Conda 把环境路径移到最前面

关键点typeset -U path 的作用是去重,但副作用是——当 Conda 尝试把环境路径加到 PATH 最前面时,如果这个路径已存在,它不会被移动,而是保持原位。

解决方案

~/.zshrc 的 Conda 初始化之后,添加一段代码强制将 Conda 环境路径放到最前面。

最终的 ~/.zshrc 配置:

# --- 1. 基础设置 ---
# 注意:typeset -U path 放到文件最后,避免影响 Conda 路径优先级

# --- 2. 导出必要的环境变量 (不涉及 PATH) ---
export GOPATH=$HOME/go
export GOROOT="/opt/homebrew/opt/go/libexec"
export GOPROXY=https://goproxy.cn,direct

# --- 3. 手动管理路径优先级 ---
# 我们把系统路径 $path 放在最后,确保我们安装的工具优先
path=(
    $GOPATH/bin
    $GOROOT/bin
    /opt/homebrew/bin
    /opt/homebrew/sbin
    /usr/local/bin
    $path
)
export PATH

# --- 4. Conda 初始化 ---
# >>> conda initialize >>>
__conda_setup="$('/opt/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/opt/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/opt/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <

# --- 5. 修复 Conda 环境 PATH 优先级 ---
# 确保激活的 Conda 环境路径始终在最前面
if [[ -n "$CONDA_PREFIX" ]]; then
    export PATH="$CONDA_PREFIX/bin:$PATH"
fi

# --- 6. 路径去重(放在最后)---
typeset -U path

验证修复

# 重新加载配置
source ~/.zshrc

# 重新激活环境并验证
conda deactivate && conda activate chatgpt-on-wechat

# 检查结果
which python
# /opt/anaconda3/envs/chatgpt-on-wechat/bin/python ✅

which python3
# /opt/anaconda3/envs/chatgpt-on-wechat/bin/python3 ✅

配置要点总结

要点说明
Conda 初始化放在靠后位置确保它能修改之前设置的 PATH
添加第 5 段修复代码强制把 $CONDA_PREFIX/bin 放到 PATH 最前
typeset -U path 放在最后在所有路径调整完成后再去重

问题:pip install后找不到包

# 检查 pip 对应的 Python
pip --version
# pip 24.0 from /opt/anaconda3/lib/python3.12/site-packages/pip (python 3.12)

# 检查当前 Python
which python

# 如果不一致,使用 python -m pip
python -m pip install package-name

问题:Conda 命令找不到

重新初始化 Conda:

# 手动初始化
/opt/anaconda3/bin/conda init zsh

# 重启终端
source ~/.zshrc

九、总结与推荐方案

三种 Python 对比

特性系统 PythonHomebrew PythonConda Python
路径/usr/bin/python3/opt/homebrew/bin/python3/opt/anaconda3/bin/python
版本控制❌ 由系统决定⚠️ 可选多版本但不方便✅ 灵活指定
环境隔离❌ 无⚠️ 需配合 venv✅ 内置
包管理pippipconda + pip
推荐度❌ 不推荐开发使用✅ 轻量开发✅ 数据科学/复杂项目

决策指南

场景推荐方案
刚买 Mac,想学 Python安装 Miniconda,用 Conda 环境
数据科学 / 机器学习Conda 环境
Web 开发 / 后端项目Homebrew Python + venv
已有 Homebrew 生态Homebrew Python + venv
需要多 Python 版本共存Conda
只是写写小脚本任何一个都行,但别用系统 Python

给不同用户的建议

入门学习者:

数据科学从业者:

Web / 后端开发者:

结语

Python 环境管理看似繁琐,但只要理解了底层逻辑,建立起清晰的认知框架,就能游刃有余。

核心原则就三条:

  1. 不要用系统 Python 开发
  2. 每个项目用独立环境
  3. 安装包前确认当前环境

希望这篇文章能帮助你在 Python 环境管理这件事上少走弯路!

到此这篇关于Mac电脑中Python环境的管理与实践的文章就介绍到这了,更多相关Mac中Python环境管理实践内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文