1. 先把这套组合的定位说清楚
Anaconda 装完、Jupyter 打开、路径配好,这三件事单拎出来都不算难,但串在一起就是新手最容易翻车的地方。我自己带过不少刚入行的朋友,十个里面有七八个卡在"明明装好了,命令敲下去却说不是内部或外部命令",或者"Jupyter 打开了,但新建的文件全跑到了 C 盘某个莫名其妙的隐藏目录里"。所以我这篇不打算写成一份冷冰冰的官方安装说明,而是按我实际折腾过的顺序,把 anaconda、jupyter、路径配置 这条链路从头到尾捋一遍,顺带把那些文档里不会写的坑点全摊开。
先说清楚这套东西到底解决什么问题。Anaconda 本质上是一个打包好的 Python 发行版加包管理器,它把 Python 解释器、conda 命令、几百个常用的科学计算库一次性塞给你,省得你一个个 pip install 到崩溃。Jupyter Notebook 是跑在浏览器里的交互式编程环境,你可以把它理解成一个"能写代码的笔记本",一段一段地执行、随手看结果、还能写 Markdown 笔记,做数据分析、跑实验、写学习记录都特别顺手。而路径配置,就是让这两个工具知道"东西该放哪、我该去哪找",是整套流程里最不起眼、却最容易埋雷的一环。
这篇文章适合谁看:完全没接触过 Python 环境管理的小白,能照着一步步做完;已经装过但被环境变量、工作目录、内核问题折磨过的半新手,也能在里面找到对应的排查思路。我不假设你有什么基础,但我会把每一步背后的"为什么"讲明白,而不是让你机械地复制粘贴命令。毕竟装环境这种事,理解了原理,下次换台机器你自己就能搞定,不理解的话,换个报错又得重新求助。
在正式开始之前,先给一个心理预期:整个过程大概需要 20 到 40 分钟,主要时间花在下载安装包和等 conda 解压上。如果你网络环境一般,下载阶段可能会更久,这个心里有数就行。
2. Anaconda 安装:选包、装包、验证一条龙
2.1 Windows 安装包怎么选才不踩雷
打开安装包下载页面,你会看到一堆版本:Windows、macOS、Linux,每个平台下又分图形化安装包和命令行安装包,还有 64 位和 ARM 之分。这里有几个判断标准,我按重要性排一下。
第一看系统架构。现在绝大多数 Windows 电脑是 64 位 x86 架构,选那个标注 64-Bit 的图形化安装包就行。如果你用的是搭载 ARM 芯片的设备,那要选对应的 ARM 版本,选错了装到一半会直接报架构不匹配。第二看 Python 版本,安装包默认绑定的 Python 版本不用太纠结,Anaconda 装完之后你随时可以用 conda 创建任意版本的虚拟环境,所以选哪个大版本关系不大。
我这里强烈建议用图形化安装包而不是命令行版。命令行版虽然装得快、占用小,但对新手来说,它不会自动帮你配置开始菜单、不会自动创建 Anaconda Prompt 快捷方式,后面用到的时候你还得手动去激活,反而更麻烦。图形化安装包多占的那点空间,换来的是开箱即用的体验,这笔账很划算。
注意:不要图省事去某些第三方软件站下载所谓的"精简版""破解版"安装包,这类包经常被删掉了关键的 conda 组件,或者塞了乱七八糟的东西,装完之后各种诡异报错,排查成本远高于重新下一个正版。
2.2 安装界面里那几个勾选项,决定了你后面顺不顺
双击安装包之后,会依次出现许可协议、安装类型、安装位置、高级选项这几屏。协议和安装类型没什么好说的,一路下一步,重点在安装位置和高级选项这两屏。
安装位置默认是 C 盘用户目录下,路径会很长,还带空格。我的习惯是改到一个短路径,比如直接装到D:\Anaconda3。为什么强调短路径不带空格?因为后面配置环境变量、写脚本、调用 conda 的时候,路径里的空格经常会被当成参数分隔符处理,引发一些莫名其妙的错误。这是很多人踩过的坑,提前避开。
高级选项里有两个复选框是重灾区,我逐个说。
第一个是"Add Anaconda3 to my PATH environment variable",也就是把 Anaconda 加到系统环境变量。官方默认不勾选,并且用红字警告说不推荐。很多新手不理解,觉得勾上不是更方便吗,直接就能用 conda 命令了。但这里的坑在于:如果你电脑上本来就有别的 Python,勾选之后环境变量的顺序可能被搞乱,导致系统不知道该用哪个 Python,出现版本打架。官方的替代方案是让你用开始菜单里的Anaconda Prompt,那是一个已经预配置好环境变量的专用终端,在里面敲 conda 和 jupyter 命令都能正常识别。
第二个是"Register Anaconda3 as my default Python",这个建议勾上。它的作用是把 Anaconda 注册成系统默认的 Python,这样一些需要 Python 支持的第三方软件能自动找到它。后面还有一屏是问要不要装 VS Code,这个看个人需求,不装也不影响我们后面用 Jupyter。
2.3 装完之后怎么验证,别急着往下走
安装进度条走完,点完成,可能会弹出一个介绍 Anaconda 生态的小窗口,直接关掉。接下来最重要的一步是验证安装,很多人跳过这步,结果后面出问题了又不知道是哪一环坏的。
从开始菜单打开Anaconda Prompt,你会看到一个黑框,前面带着(base)字样,说明 conda 的基础环境已经激活了。在这个窗口里依次敲三条命令:
conda --version python --version conda list第一条能打印出 conda 的版本号,比如conda 24.x.x;第二条打印 Python 版本;第三条会刷出一大串已安装的包。三条都能正常输出,说明 Anaconda 本体没问题。
提示:如果你在普通的 cmd 或 PowerShell 里敲 conda 提示"不是内部或外部命令",但在 Anaconda Prompt 里正常,那就说明你当初没勾选加入 PATH——这其实是对的,用 Anaconda Prompt 就够了,不用特意去补环境变量。
如果你确实需要在自己的终端里用 conda,比如喜欢用 Windows Terminal,可以用conda init命令来初始化。它会自动往你的终端配置文件里写入初始化脚本,重启终端后就能识别 conda 了。这一步比手动改环境变量安全得多。
3. Jupyter 的安装与工作目录改造
3.1 装 Jupyter 的三种路子,我为什么推荐 conda
Jupyter 的安装方式大致有三种:pip 装、conda 装、还有套在 Anaconda 里直接用。这三种我都试过,给你把区别讲清楚。
用 pip 装最直接,一条pip install jupyter就完事,但问题在于它装到哪个 Python 环境里取决于你当前激活的环境,如果你环境管理混乱,很容易装到不该装的地方。conda 装的话是conda install jupyter,好处是 conda 会帮你处理依赖关系,尤其是那些带 C 扩展的包,conda 的二进制分发比 pip 从源码编译省心太多。而如果你装的是完整版 Anaconda,其实 Jupyter 已经预装好了,直接敲命令就能用。
我的建议是:既然你装了 Anaconda,就别再单独 pip 装 Jupyter 了,直接用 base 环境里的那个。如果担心版本旧,用conda update jupyter更新一下即可。对于新手,能用 Anaconda 自带的就绝不自己另外装,这是减少环境混乱的黄金法则。
3.2 改默认工作目录,这一步九成的人都做错了
现在重点来了,也就是标题里的路径配置。你在 Anaconda Prompt 里直接敲jupyter notebook,浏览器会弹出一个页面,看起来一切正常。但你新建一个笔记本,会发现它默认存到了某个莫名其妙的位置——Windows 上通常是C:\Users\你的用户名\或者某个隐藏目录。这就是因为 Jupyter 默认的工作根目录指向了你的用户主目录。
想改掉这个行为,正规做法是两步:先生成配置文件,再改配置。
第一步,生成配置文件。在 Anaconda Prompt 里执行:
jupyter notebook --generate-config它会告诉你配置文件生成到了哪里,通常会打印类似这样的路径:
Writing default config to: C:\Users\你的用户名\.jupyter\jupyter_notebook_config.py这里有个细节要注意:如果你之前生成过配置文件,它会问你Overwrite ... [y/N],正常情况下如果没改过就输入 y 覆盖,如果已经改过就想清楚,别把心血覆盖没了。生成之后,这个.jupyter文件夹是个隐藏文件夹,在资源管理器的"查看"里打开"隐藏的项目"才看得到。
第二步,改配置。用记事本或者 VS Code 打开那个jupyter_notebook_config.py。这个文件特别长,全是注释,你要找的是关于notebook_dir的那几行,大概长这样:
# c.NotebookApp.notebook_dir = ''把它改成你的目标路径,并且去掉行首的 # 号让这行生效:
c.NotebookApp.notebook_dir = 'D:\\jupyter_workspace'注意路径里的反斜杠要写成双反斜杠\\,或者干脆用正斜杠/,因为 Python 字符串里单反斜杠是转义符,写单反斜杠会出问题。这是个纯坑,很多人改完没反应就是因为这个。
3.3 版本更新后的参数名变化,别被老教程带偏
这里必须提醒一个关键点。Jupyter 从某个版本开始升级到了 Jupyter Server 架构,配置项的名字变了。你在网上搜到的大量教程还停留在旧版本,教你改c.NotebookApp.notebook_dir,但如果你装的是较新的版本,这个参数可能已经不生效了,得改成c.ServerApp.root_dir。
怎么判断该用哪个?教你一个稳妥的办法:生成配置文件的时候看它生成的到底是jupyter_notebook_config.py还是jupyter_server_config.py。如果是前者,用NotebookApp;如果是后者,用ServerApp。两个文件里对应的注释都是现成的,你搜索关键字就能找到。
还有个更省事的思路:启动的时候直接加参数,不依赖配置文件。比如:
jupyter notebook --notebook-dir=D:\jupyter_workspace新版里对应的是--ServerApp.root_dir。这个方式适合临时用,不用每次改配置文件,但缺点是命令长、每次都得敲。我的习惯是配置文件改一次,长期生效,偶尔临时用别的目录再靠命令行参数覆盖。
3.4 启动后浏览器打不开怎么办
配置改好之后,再敲jupyter notebook,它会在终端里输出一大堆信息,包括一个带 token 的访问地址。正常情况下浏览器会自动弹开。如果没弹,或者弹出来是空白,先别慌,按这个顺序排查。
看终端最后几行,会有一行类似http://localhost:8888/?token=xxxxxxxx的地址,手动复制到浏览器打开。如果端口被占用,它会告诉你换了一个端口,比如从 8888 变成 8889,那你得用新的端口访问。如果你想要一个固定的端口,可以用--port 8888指定。
注意:如果浏览器一直转圈打不开,十有八九是端口被别的程序占了,或者防火墙拦了本地回环。先试试换端口,再检查是不是某些软件占用了这个端口。
4. 虚拟环境与 Jupyter 内核打通
4.1 为什么建议给每个项目建独立环境
Anaconda 最值钱的能力就是虚拟环境。base 环境就像一间公共仓库,什么都往里塞,时间长了版本冲突会让你痛不欲生——A 项目要 numpy 1.20,B 项目要 numpy 1.26,装在一起必然有一个跑不起来。正确做法是每个项目建一个独立环境,各自管各自的依赖。
创建环境的命令很简单:
conda create -n myproject python=3.11这个-n后面跟的是环境名字,python=3.11指定这个环境用的 Python 版本。回车之后它会列出要安装的东西,确认一下输入 y。装完用conda activate myproject激活,终端提示符前面会从(base)变成(myproject),说明你切进这个环境了。
环境装好之后,在这个环境里装 Jupyter 相关的包:
conda install ipykernel conda install jupyteripykernel是关键,它相当于这个 Python 环境和 Jupyter 之间的桥。没有它,Jupyter 里就看不到这个环境。
4.2 把虚拟环境注册成 Jupyter 内核
默认情况下,Jupyter 只能看到 base 环境。你想在 Jupyter 里用刚建好的myproject环境,得手动把它注册成一个"内核"。命令是这样的:
python -m ipykernel install --user --name myproject --display-name "Python (myproject)"逐段解释一下:--user表示装到当前用户的目录下,避免权限问题;--name是内核的内部标识,一般跟环境名一致;--display-name是在 Jupyter 界面下拉菜单里显示的名字,你可以写得更友好,比如带上项目名。
注册完之后,重启 Jupyter,在新建笔记本的时候或者工具栏的 Kernel 菜单里,就能看到你注册的那个内核了。选中它,你在这个笔记本里跑的所有代码就都在对应环境里执行。这套机制我强烈建议每个项目都做一遍,虽然多敲一条命令,但后面切换环境、复现实验的时候会感谢自己。
如果哪天环境删了,记得把对应的内核也清掉,命令是:
jupyter kernelspec list jupyter kernelspec remove myproject第一条列出所有内核,第二条删掉指定的那个。内核残留不清理,Jupyter 菜单里会出现一堆用不了的空壳选项,看着烦人。
5. 那些让人抓狂的报错,一个一个拆
5.1 单元格执行代码没反应,转圈圈半天
这是新手反馈最多的问题之一。你兴致勃勃打了个print("hello"),按下 Shift+Enter,结果左边显示[*]一直在转,就是不出结果。这种情况八九不离十是内核挂了或者连不上。
先看右上角的圆圈颜色,如果是实心黑点或者显示 "Kernel connecting",说明内核没启动成功。最直接的办法是点菜单栏 Kernel → Restart,重启内核再试。如果重启也没用,关闭这个笔记本,回到终端看有没有报错信息。
另一个常见原因是环境里缺了ipykernel或者版本不匹配。回到终端,激活对应环境,执行conda install ipykernel补齐,再重启。
还有一种情况是防火墙或者安全软件拦了本地通信。Jupyter 的内核和前端是通过本地端口通信的,某些安全软件会误拦。可以临时关掉试试,如果关掉就正常了,把相关进程加进白名单。
5.2 启动时蹦出 DLL load failed
有个很有代表性的报错是ImportError: DLL load failed while importing rpds这类。它通常出现在你敲jupyter notebook或者jupyter --version的时候。根源一般是环境里的依赖包版本不匹配,或者某些二进制组件损坏。
解决思路分两层。浅层的办法是直接重装相关包:
conda install --force-reinstall jupyter conda install --force-reinstall rpds-py--force-reinstall强制重新安装,能把损坏的文件覆盖掉。如果重装还不够,深层一点的问题是整个环境已经被污染,这时候最省事的办法不是跟它死磕,而是直接新建一个干净环境,把 Jupyter 装进去。我踩过好几次这种坑,跟一个坏掉的环境斗争两小时,不如花十分钟重建一个新的,性价比高得多。
心得:环境这东西,坏了就重建,别舍不得。你把时间花在修复上,往往不如推倒重来。
5.3 命令找不到、conda 和 jupyter 都不认
如果你在普通终端里敲jupyter提示找不到命令,但在 Anaconda Prompt 里正常,那就用 Anaconda Prompt 即可。如果连 Anaconda Prompt 里都不认,那说明安装本身可能有问题,或者环境变量被别的程序改乱了。
排查顺序是这样:先确认 Anaconda 的安装目录还在不在,D:\Anaconda3下面的Scripts目录里有没有conda.exe。然后在 Anaconda Prompt 里敲where conda,它会告诉你 conda 的实际位置。如果显示的位置跟你安装的不一致,说明系统里有多个 conda,得清理。
想要在普通终端也能用 conda,最稳的做法不是手动往环境变量里加路径,而是用conda init把初始化脚本注入到你的 shell 配置里。这样每次开终端会自动初始化 conda,比硬改 PATH 更干净。改完记得把终端关掉重开,配置才会生效。
5.4 想要的自动补齐和 Markdown 目录
Jupyter Notebook 原生的代码自动补齐能力比较弱,很多人怀念 IDE 那种智能提示。想要补齐,可以装扩展。老一点的做法是装jupyter_contrib_nbextensions,里面有个 Hinterland 插件专门做自动补齐:
conda install -c conda-forge jupyter_contrib_nbextensions jupyter contrib nbextension install --user装完重启 Jupyter,首页会出现一个 Nbextensions 标签页,进去勾选 Hinterland 即可。
同在这个扩展包里,还有一个叫Table of Contents (toc2)的插件,可以实现 Markdown 目录。Jupyter 本身是不支持[TOC]这种语法的,网上说的"Markdown 目录语法"在原生环境里其实不生效,必须靠这个扩展。启用 toc2 之后,侧边栏会多出一个目录按钮,它会自动抓取你那些#、##标题生成可点击的目录。写长笔记的时候特别好用。
如果你更想要开箱即用的智能补全和目录,可以考虑用JupyterLab,它是 Jupyter 的下一代界面,命令是jupyter lab,很多能力原生就有。不过对于刚上手的人来说,先把 Notebook 用熟,再迁移到 Lab 也不迟。
5.5 常见问题速查表
把上面这些踩坑经验整理成一张表,出问题的时候对着查会快很多:
| 现象 | 大概率原因 | 处理方式 |
|---|---|---|
| 提示不是内部或外部命令 | 没用 Anaconda Prompt,或 PATH 未配置 | 改用 Anaconda Prompt,或用 conda init 初始化 |
| 新建笔记本存到奇怪目录 | 默认工作目录没改 | 改配置文件里的 notebook_dir / root_dir |
| 改了配置不生效 | 参数名版本不对,或路径转义写错 | 确认是 NotebookApp 还是 ServerApp,反斜杠写双份 |
| 单元格执行一直转圈 | 内核挂掉或 ipykernel 缺失 | 重启内核,重装 ipykernel |
| 启动报 DLL load failed | 依赖损坏或环境被污染 | 强制重装,或新建干净环境 |
| 浏览器打不开页面 | 端口被占或本地回环被拦 | 换端口,检查安全软件 |
| 下拉菜单看不到虚拟环境 | 没注册内核 | 用 ipykernel install 注册 |
| Markdown 目录不生效 | 原生不支持,需扩展 | 装 nbextensions 的 toc2 |
| 代码没有自动补齐 | 原生能力弱 | 装 Hinterland 或用 JupyterLab |
这张表我建议收藏,基本上覆盖了日常八成以上的问题。
6. 几个让我少走弯路的操作习惯
最后聊几个我长期用下来觉得真的省事的小习惯,都是踩坑踩出来的。
第一个是给每个项目建独立环境和独立工作目录。别在 base 环境里乱装包,base 环境保持干净,只放 conda 和 Jupyter 这些基础设施。业务相关的包统统装进项目环境。工作目录也别混,一个项目一个文件夹,Jupyter 的启动目录要么全局设成一个大目录,进去之后再切,要么干脆每个项目单独指定。这样你回头看哪个项目,环境切过去,目录切过去,干净利落。
第二个是配置文件改一次就备份。jupyter_notebook_config.py改好之后,复制一份到别的地方存着。下次重装系统或者换电脑,直接把配置文件拷回去,省得重新折腾。同理,conda env export > environment.yml能把当前环境导出成一个清单文件,换机器的时候conda env create -f environment.yml一键复现,比一个个手装靠谱太多。这个功能我用得很多,特别是做实验需要复现的时候。
第三个是账号密码和 token 的事别嫌烦。Jupyter 启动时带的 token 是安全机制,别为了图方便把 token 关掉或者设成空密码,尤其是当你的机器在局域网里的时候。如果你想设置密码,可以用jupyter notebook password命令生成一个哈希密码写进配置,比明文写密码安全。
第四个是关于路径里千万别带中文和空格。这是我吃过最大的亏。有一次我把工作目录设在了带中文的路径下,结果某些库读文件死活读不到,排查了大半天才发现是编码问题。后来我所有跟开发相关的路径全用英文,短路径优先,从此再没出过这毛病。你如果现在正在设置目录,顺手检查一下路径里有没有中文和空格,能省掉未来一个下午的抓头发。
这套 Anaconda + Jupyter + 路径配置的组合,说复杂不复杂,说简单也不简单,关键在于理解每一步在干什么,而不是照抄命令。环境管理这件事,前期多花二十分钟把它理清楚,后面能给你省下无数个小时。我个人最实在的建议就是:保持环境干净,路径保持简单,配置文件留好备份,遇到报错先看终端输出——记住这几点,你基本就能跟这套工具和平相处了。