ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Anaconda配置Python环境:从安装到IDE对接的完整指南

Anaconda配置Python环境:从安装到IDE对接的完整指南 第一次学 Python 的时候我在安装第三方库这件事上浪费了整整一个下午。pip install 各种依赖报错网上搜到的答案互相矛盾改了这个包又毁掉那个环境最后干脆把系统搞到连 python 命令都找不到了。后来我换成用 Anaconda 配置 Python一切才重新回到可控状态。Anaconda 说白了就是一套集成了 Python、常用科学计算库和 conda 包管理器的发行版它能让你在一个工具里解决 Python 安装、包管理、多版本环境切换这几件最容易让人栽跟头的事。这篇文章不打算讲高大上的理论就讲怎么把 Anaconda 装好、怎么用它配一套干净的 Python 环境、怎么把环境接到 VS Code 和 PyCharm 里以及我踩过的那些典型坑。无论你是刚入门 Python 的新手还是想在同一台电脑上管理多个项目的老手这套流程都值得直接抄作业。1. 为什么 Python 环境问题这么容易翻车Anaconda 又是怎么解决的1.1 全局装包带来的依赖冲突是最大乱源先问一个很基础的问题你还记得自己第一次用 pip install 装第三方库的经历吗大概率是屏幕上滚过一大段依赖解析日志等上几秒出现一行 Successfully installed你觉得 Python 环境管理不过如此。实际上这个“成功”相当脆弱。当你只装一个系统的 Python 时所有 pip 安装的包都会被塞进同一个 site-packages 目录。今天你要跑一个依赖 pandas 0.25 的老项目明天另一个项目要求 pandas 1.5两边同时存在就必然互相伤害。我见过最典型的一幕是同事为了解决某个依赖报错直接执行 pip install --upgrade 某个核心库结果另一个线上项目的代码当场跑不起来测试全红。原因就是 API 变了全局环境被整体升级污染。这不是个案在没有隔离机制的环境里装包相当于在同一个房间里堆杂物堆得越多越容易互相挤压。1.2 Anaconda 的三板斧虚拟环境、包管理器、版本切换为了隔离Python 官方提供了 venv 虚拟环境原理是每个项目一个独立目录Python 解释器和包都放里面。听起来没问题但 venv 本身不解决版本切换的问题。你想在同一台机器上分别用 3.8、3.10、3.11 跑不同项目用 venv 就得先手动装三个官方 Python每次创建虚拟环境时还得指定对应解释器的绝对路径。对新手来说这一步已经足够劝退。Anaconda 做的事情就是把这些麻烦集中打包。它自带一个 base 环境里面预置了 Python 解释器和 NumPy、Pandas、Matplotlib 这些常用数据科学生态包。关键是它带了 conda 这个包管理器你可以用 conda create 创建任意多个互相隔离的虚拟环境每个环境指定不同 Python 版本conda create -n py310 python3.10 conda create -n py38 python3.8创建完成后对着环境名执行 conda activate当前终端就切到对应环境。这时候安装的包只影响当前环境不会污染另一个项目更不会搞坏系统 Python。配合 conda 的依赖解析安装 numpy、scipy 这类带 C 扩展的包时能直接使用预编译好的二进制文件基本不会遇到官方 Python 里常见的编译失败问题。1.3 和官方 Python venv 的直观对比很多人纠结到底用官方 Python 还是 Anaconda我把两者的典型体验列成一张表对比项官方 Python venvAnacondaPython 多版本切换需手动安装多个解释器路径自己管conda create 指定 python 版本一条命令环境隔离venv 可以隔离conda 环境隔离机制一致但命令更简单科学计算包安装pip 经常需要编译源码conda 直接拉预编译包失败率低依赖冲突处理完全依赖 pip 的解析全局易乱conda 有频道和依赖解析冲突可预控适合人群已有经验、想要最小化安装的人绝大多数学习者和多项目开发者这里不是要否定官方 Python。轻量、纯净是它的优势但对环境管理经验不足的人Anaconda 的高容错率确实更友好。你不需要提前弄懂 PATH、site-packages、解释器背后所有细节只要记住一套 conda 命令就能把环境收拾得明明白白。这也是这篇教程以 Anaconda 为主线来配置 Python 的根本原因。2. 把 Anaconda 装好下载源、安装选项和环境变量2.1 官网下不动的替代方案Anaconda 官网是 anaconda.com但国内直连有时会出现页面转圈、下载进度条纹丝不动的情况这是长久存在的实际问题不是你电脑的锅。我的做法是优先去国内高校镜像站下载安装包最常用的是清华大学的开源软件镜像站进入 Anaconda 目录后根据系统选文件64 位 WindowsAnaconda3-2024.xx-Windows-x86_64.exemacOS Intel 芯片Anaconda3-2024.xx-MacOSX-x86_64.pkgmacOS Apple Silicon 芯片Anaconda3-2024.xx-MacOSX-arm64.pkgLinux x86_64Anaconda3-2024.xx-Linux-x86_64.sh下载后先做一件事核对该文件的 SHA256 哈希官网和镜像站都会给出校验值。Windows 下用 PowerShell 执行 Get-FileHashLinux/macOS 下用 sha256sum。别嫌这一步多余我见过不止一次下载中途损坏然后安装报错的案例。校验通过再开始安装能少走很多弯路。2.2 Windows 安装里两个值得斟酌的选项双击安装包过程大部分时间是“下一步”党的天下但有两个选项你需要亲自做决定甚至值得提前想清楚。第一安装路径。默认是 C:\Users\你的用户名\anaconda3个人建议保持默认或者自定义成 D:\anaconda3 这种纯英文、无空格的路径。千万别装到 Program Files 这类带空格的目录也不要用中文用户名路径。否则后面调用 conda、对接 IDE 时容易遇到路径解析问题到时候排查起来既麻烦又隐蔽。第二Add Anaconda3 to my PATH environment variable 这个勾选项。官方默认不勾选这是有原因的如果你之前装过官方 Python 并且已经加进了 PATH此时再把 Anaconda 加进去两个 python.exe 会在 PATH 里打架。cmd 里敲 python 到底调用哪个完全取决于 PATH 顺序很容易出现“明明装了 Anaconda用的却还是旧 Python”的诡异情况。我的建议是按默认不勾选日常通过 Windows 开始菜单里的 Anaconda Prompt 来执行 conda 命令。Anaconda Prompt 会预先设置好环境变量省心。如果你非要在普通 cmd 或 PowerShell 里直接使用 conda我后面第五节会专门讲手动配置 PATH 的方法和代价。2.3 macOS / Linux 的脚本安装与 conda initmacOS 和 Linux 上我用得最多的是 .sh 安装脚本。拿到安装包后执行bash Anaconda3-2024.xx-Linux-x86_64.sh一路回车阅读协议输入 yes 同意再选择安装目录。最后安装器会询问是否运行 conda init 把初始化写入 shell 配置文件这一步建议选 yes。macOS 的 zsh 会写进 ~/.zshrcLinux 的 bash 会写进 ~/.bashrc。写入之后新开的终端会自动激活 conda 环境命令行前面出现 (base) 前缀说明 conda 已经接管了你的 shell 环境。如果你装的时候选了 no或者中途换了 shell手动补救也很简单# 替换成自己的 Anaconda 安装路径 ~/anaconda3/bin/conda init bash然后 source ~/.bashrc 或 source ~/.zshrcconda 命令就能用了。这里要提醒一句安装 Anaconda 之前如果系统里已经存在全局 Python脚本初始化后会默认把 Anaconda 的目录放在 PATH 前面新终端里敲 python 会优先用 Anaconda 的解释器。这样反而省事至少不会出现“装完还是旧版本”的困惑。2.4 装完怎么确认自己装成功了无论哪个系统安装完成后都要做一次完整验证。Windows 打开 Anaconda PromptmacOS/Linux 新开一个终端依次输入conda --version python --version python -c import numpy; print(numpy.__version__)能正常输出 conda 版本号、Python 版本号和 numpy 版本号说明 base 环境没问题。如果 conda 命令找不到优先检查环境变量或者回到上一个小节重新执行 conda init。如果 Python 版本号显示的确实是你安装的版本但 import numpy 报错多半是安装包损坏需要重新下载和校验安装包。3. 用 conda 亲手搭一套 Python 环境3.1 创建、激活、查看、删除一条龙安装 Anaconda 只是第一步真正配置 Python 的过程发生在 conda 命令里。我的固定做法是创建独立环境而不是直接在 base 里装包。比如要为某个爬虫项目准备 Python 3.10 环境conda create -n crawl python3.10执行后 conda 会解析依赖并询问确认确认后创建独立环境。以后想装一堆常用库可以在建环境时一次性加上conda create -n crawl python3.10 requests beautifulsoup4 lxml这个环境下所有的包和 Python 解释器都放在 Anaconda 安装目录下的 envs\crawl 文件夹里和 base 完全隔离。切换环境用两条命令conda activate crawl conda deactivate查看当前机器上所有环境以及当前处于哪个环境conda env list输出里带 * 的是当前激活的环境。删除不需要的环境conda env remove -n crawl我自己习惯用项目名而不是库名命名环境比如 crawl、analysis、web。时间久了看一眼环境列表就能马上知道每个环境对应什么用途不会出现一堆 py310、test、test2 混在一起让人找不到北的情况。3.2 conda install 与 pip install 的分工在每个激活的环境里装包最直接的命令是conda install requestsconda 的优势是自动解析依赖树能避免出现包 A 需要 numpy 1.21、包 B 却要求 1.24 的冲突局面。但 conda 的官方源并不包含所有 Python 包尤其是那些比较新或者小众的包conda 里可能搜不到。遇到这种情况大多数人会切到 pippip install some-package这里有一个很容易踩的坑conda 管理的包列表里看不到 pip 安装的内容反过来 pip 也不感知 conda 的依赖解析。混用最容易出问题的场景是先用 pip 装了一个依赖库再用 conda 装另一个恰好需要升级该依赖库的包conda 可能会覆盖掉 pip 装的版本程序运行时行为就变得不可预测。我的实际策略是优先用 conda 安装项目基础依赖conda 里实在没有的在环境激活状态下用 pip 补装并且尽量不在同一个环境里来回横跳。如果你对稳定性要求高安装时显式指定版本更稳妥conda install numpy1.26.4指定版本可以避免 conda 自动把某个库升级到不兼容的新版本。尤其是跑老项目的时候版本锁定能省掉很多不必要的回归错误。3.3 换源之后 conda 就顺滑了前面提到官网容易连不上conda 默认源在国外国内网络下载包经常慢到让人想去泡杯茶。解决办法是切换成国内镜像源我用的是清华 TUNA 的 Anaconda 镜像。在终端执行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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --set show_channel_urls yes这些命令会写入用户目录下的 .condarc 文件。添加多个 channel 时conda 会按顺序查找优先匹配先添加的源。配置完成后建议执行一次 conda clean -i 清除下载缓存然后建一个新环境测试下载速度。如果网络环境特殊连不上清华镜像中科大、阿里云的镜像源也可以替换配置逻辑完全一样只换 URL 前缀即可。换源这件事是 conda 用顺手的关键一步。不换源的话每次装包可能要多等十几分钟特别影响耐心和效率尤其是当你需要反复创建环境的时候。3.4 环境克隆、导出和迁移再也不怕换电脑项目做到一半要换电脑或者同事需要完全相同的运行环境这时候手工逐步安装包就太原始了。conda 提供了迁移方案。先导出当前环境的完整依赖清单conda env export environment.yml在新机器上执行conda env create -f environment.yml就能复刻出一个名称和依赖一致的环境。不过 conda env export 导出的是当前平台的精确版本和下载源跨平台比如从 Windows 迁到 Linux时可能会遇到部分包不兼容的问题。如果要跨平台共享可以退一步用conda env export --from-history environment.yml这个命令只导出你手动指定过的包名和 Python 版本不带依赖解析细节跨平台兼容性更好。如果只想在本地快速复制一份已验证可用的环境直接用conda create --name crawl_backup --clone crawl克隆出来的环境独立存在和源环境互不影响。我在折腾新项目前经常用这个方式给稳定环境做备份改坏了直接删掉重来。3.5 激活环境时 warning 的来龙去脉配置完环境很多初学者会遇到一个提示直接在命令行运行 python 时shell 提示当前解释器在一个 conda 环境里但这个环境没有激活某些库可能加载失败。出现这个 warning 的原因很简单conda 的目录已经在 PATH 里敲 python 能调用到 Anaconda 的解释器但相关的动态库搜索路径和模块路径还没有切换到你指定的环境。解决办法就是先 conda activate 对应的环境再运行 python不要在未激活状态下硬要调用环境里的解释器。这个 warning 不是错误更像 conda 在提醒你“操作顺序不对”。养成 activate 之后再用 python 的习惯就不会再看到它。4. 让 IDE 和 Jupyter 真正用上你配置的环境4.1 为什么 IDE 里总提示找不到包环境配好了conda 命令也会用了但很多人紧接着会在 IDE 里碰壁终端里 import numpy 明明正常打开 VS Code 运行同一段代码却提示 ModuleNotFoundError: No module named numpy。原因很直白IDE 默认使用的解释器不是你刚建好的 conda 环境而是它自动探测到的系统 Python 或某个内置解释器。你在终端里安装的包都在 conda 环境的 site-packages 里IDE 用的解释器根本不知道它们存在。所以把环境配到 IDE 里本质就一句话让 IDE 直接使用你指定的那个 conda 环境的 python.exe也就是把 IDE 的 Python 解释器路径指向这个环境的可执行文件。4.2 VS Code 里的解释器选择VS Code 里要先安装 Python 扩展否则下面操作不存在。装好后按 CtrlShiftP 打开命令面板输入 Python: Select Interpreter在弹出的列表里通常能看到 conda 环境列在下方。选中你需要的环境即可。如果列表里找不到想要的点击 Enter interpreter path 手动输入路径Windows 下一般是C:\Users\你的用户名\anaconda3\envs\crawl\python.exe选择完成后VS Code 右下角状态栏会显示当前解释器名称。此时新建终端VS Code 会自动激活对应的 conda 环境命令行前缀会出现 (crawl)。这意味着你在终端里执行 pip install也会装进同一个环境代码侧和终端侧完全一致不再出现两边各装一包的错位问题。4.3 PyCharm 里的 Conda Environment 设置PyCharm 的配置路径略有不同菜单栏 File - Settings - Project - Python Interpreter点击右上角齿轮选择 Add Interpreter - Add Local Interpreter。在弹出的对话框里Interpreter type 选择 Conda Environment勾选 Use existing environment在下拉框里选择建好的 crawl 环境。如果下拉框是空的点右侧的浏览按钮手动定位 envs 目录下对应环境的 python.exe。这里要特别提醒很多人在 PyCharm 里会误选 System Interpreter 或 Virtualenv结果创建出来的是另一套虚拟环境包还得重装一遍。只要你想使用 Anaconda 管理好的环境就一定要选 Conda Environment并确保路径指向 envs 下面的 python.exe而不是 anaconda3 根目录下那个 base 的 python.exe。这一步错位会带来很长一段时间的困惑。4.4 把 conda 环境挂成 Jupyter Notebook 的内核如果你习惯用 Jupyter Notebook还需要多做一步否则 Notebook 里默认使用的内核也是 base 环境。推荐装一个 nb_conda_kernels 包来自动关联所有 conda 环境conda install -n base nb_conda_kernels装完后启动 Jupyter新建 Notebook 时内核列表里会出现你创建过的所有 conda 环境。另一种手动方式是在目标环境里执行conda activate crawl python -m ipykernel install --user --name crawl --display-name Python (crawl)这样 Notebook 的 Kernel 菜单里就会出现一个名为 Python (crawl) 的内核切换内核后 import 到的包就是该环境下的包。我个人更推荐 nb_conda_kernels因为它能随环境新建自动发现不需要每建一个环境就手动注册一次。5. 高频故障和我的处理方式5.1 Anaconda Navigator 点 Launch 没反应这是搜索热词里出现频率很高的问题。我也在新版 Anaconda 上遇到过Navigator 界面能正常打开但点 Jupyter Notebook 或 Spyder 的 Launch 按钮点了没反应偶尔还会弹一个 something went wrong 之类的错误框。排查思路大致是这样Navigator 本身是一个基于 Web 的图形客户端点击 Launch 后它会用子进程启动目标程序。如果 conda 和 Navigator 的版本差距较大或者 Navigator 依赖的某些包损坏启动动作就会卡住。最常见的处理手段用管理员身份打开 Anaconda Prompt执行 conda update -n base anaconda-navigator。顺便升级 condaconda update -n base conda。还是卡的话杀掉后台未能退出的 navigator 进程重启应用。其实还有一个更务实的思路Navigator 出问题时没必要和它死磕。Jupyter Notebook 可以直接在终端里运行 jupyter notebookSpyder 可以运行 python -m spyder_app。命令行方式跳过 Navigator 那层界面稳定得多。我现在大部分项目直接用 VS Code 或终端启动 JupyterNavigator 基本退化成偶尔看一眼环境状态的辅助工具。5.2 普通终端用不了 conda 命令怎么办Windows 上最常见的现象是安装时没勾 Add to PATH在普通 cmd 或 PowerShell 里输入 conda 提示命令找不到。如果坚持要在通用终端里用 conda手动加环境变量也不复杂。右键“此电脑” - 属性 - 高级系统设置 - 环境变量在用户变量或系统变量的 Path 里新增这几条C:\Users\你的用户名\anaconda3 C:\Users\你的用户名\anaconda3\Scripts C:\Users\你的用户名\anaconda3\Library\bin改完保存重开一个 cmd 窗口conda --version 就能正常输出了。但加了 PATH 就要接受一个后果以后任何终端里敲 python优先调用的是 Anaconda 的解释器。如果系统里还有别的 Python需要仔细确认 PATH 顺序否则会在不知不觉中运行错版本。我的建议是大多数情况下直接用 Anaconda Prompt少在普通 cmd 里硬上 conda能从源头省掉很多版本冲突的麻烦。5.3 pip 安装包后 conda list 看不到是装丢了吗这个现象会让不少人以为自己装错地方了。实际上 pip 安装的包和 conda 安装的包位于不同管理维度conda list 命令只展示由 conda 管理的包。你可以用 pip list 查看当前环境里 pip 视角下的所有包用 conda list 看 conda 视角两个列表本来就不完全一致这是正常现象不用慌。真正要警惕的是“未激活环境下直接 pip install”。比如你在 base 环境没激活的状态下执行 pip install包会被装进 base或者更糟装到系统的某个 Python 里。等你在项目环境里 import 时却只有干瞪眼。我自己固定底线是新项目永远先 conda create 建一个干净环境核心包用 conda 装没有的再让 pip 补且装之前确认当前命令行前缀已经显示为目标环境名。5.4 别用 conda update --all 把项目环境一键升级废最后想聊一个很多人不清楚的坑conda update --all 确实很舒服一条命令把所有核心包升级到最新。但 conda 处理大型升级时有时会把环境里指定的 Python 小版本也升级或者把某个依赖库升到比项目要求更高的版本导致原本稳定运行的项目开始报兼容性错误。我现在很少对某个项目环境做全局更新。有升级需求时先执行 conda env export environment.yml 导出依赖作为备份然后单独指定包升级比如 conda update numpy。这样既达到了更新目的又把不可控的影响范围压到最小。对于 base 环境我更是只放 conda 和 navigator 这类管理工具尽量不往里装业务包。base 保持干净项目环境随建随删才是 Anaconda 用起来最顺手的姿势。
返回列表