ARTICLE DETAIL

资讯详情

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

Anaconda 安装、conda 环境与 Navigator 闪退排查

Anaconda 安装、conda 环境与 Navigator 闪退排查 1. Anaconda 到底解决了什么问题Navigator 又在其中扮演什么角色刚入行的朋友问我最多的一句话是我不就是想写个 Python 脚本吗为什么非要装 Anaconda这个疑问很合理因为如果你只写单文件脚本、只用标准库那确实没必要。但只要你的项目开始出现numpy、pandas、scipy、pytorch这类带编译扩展的科学计算包或者你手上同时有两个项目一个要 Python 3.8 一个要 3.11Anaconda 的价值就立刻体现出来了。它本质上不是一个Python 安装包而是一整套包管理器 环境隔离器 科学计算发行版的组合体Anaconda Navigator 则是这套组合体的图形化外壳。很多人第一次打开 Anaconda Navigator 会觉得它像个软件商店——左边一排图标右边是 Environments、Learning 等标签页点一下就能装 Jupyter Notebook、Spyder、VS Code。这个印象没错但只看到了表面。Navigator 真正的定位是把 conda 的命令行能力翻译成可点击的界面让你不用背conda create -n xxx python3.11这种命令也能管环境。问题是图形界面在带来便利的同时也引入了一层额外的故障点——这也是为什么Anaconda Navigator 闪退loading applications这类问题在搜索榜上常年居高不下。你去看那些求助帖八成不是 Python 本身坏了而是 Navigator 这层壳卡住了。1.1 从装个 Python 而已到环境依赖地狱先说清楚痛点。Python 的第三方包生态极其庞大而包的依赖关系是树状的你装AA依赖B2.0B又依赖C1.5同时你的另一个项目需要B2.0。如果所有包都装在同一个全局 site-packages 目录里这两套需求就会互相覆盖最后谁也用不了。这就是所谓的依赖地狱。传统 pip 的解决方案是 virtualenv思路是复制一份解释器、隔离出独立的 site-packages。这个方案能用但有个硬伤它只能隔离 Python 层的包管不了非 Python 的二进制依赖。比如pytorch需要特定版本的 CUDA 运行库gdal需要 C 编译的底层库ffmpeg、mkl这类东西 pip 是管不动的。conda 的设计从一开始就把这些非 Python 依赖也当作包来管理它有自己的二进制分发格式.conda/.tar.bz2和依赖求解器能同时处理 Python 包和系统级库。这是 conda 与 pip 最本质的分工差异。所以我的建议一直很明确科学计算栈、深度学习框架、地理信息与信号处理这类重二进制依赖的包优先用 conda 装纯 Python 的轻量库、conda 仓库里没有的包再用 pip 补。千万不要在同一个环境里反复用 pip 和 conda 交叉覆盖同一个包那是绝大多数环境玄学问题的源头。1.2 conda、Anaconda、Miniconda 三者别再搞混这三个词经常被混着叫但指的不是一回事名称本质体积适用人群conda包管理器与环境管理器命令行工具极小所有人核心组件Minicondaconda Python 基础解释器无预装科学包约 100MB老手、服务器、磁盘紧张AnacondaMiniconda 数百个预装科学包 Navigator3GB 以上新手、教学、需要开箱即用我自己的机器上装的是 Miniconda因为预装的几百个包我 90% 用不上反而拖慢conda update --all的求解速度。但给刚入门的同事装机我一律推荐 Anaconda——不用折腾就有 Jupyter、Spyder、Navigator学习曲线平缓得多。这不是水平高低的问题是场景匹配的问题你要的是快速验证想法就选 Anaconda你要的是极致可控和轻量就选 Miniconda。服务器上部署我基本不用 Navigator只装 Miniconda 走命令行省资源也省心。1.3 Navigator 的界面结构与你真正会用到的那几个按钮Navigator 的功能区其实就四块认清之后你就不会被它唬住Home主页应用卡片墙。每张卡片右上角有个小齿轮或箭头点开才有 Install / Launch / Update 三个选项。很多人找不到更新按钮就是因为没点那个小箭头。Environments环境创建、克隆、删除环境以及在某个环境里安装包。这是 Navigator 里唯一我建议常用的页面因为可视化看到包列表确实直观。Learning学习官方文档和教程入口基本是摆设可以忽略。Community社区论坛链接同样可以忽略。注意Navigator 的更新按钮操作的是base 环境里的应用包而不是你创建的业务环境。这一点特别容易误解很多人以为在 Navigator 里点了更新自己的myproject环境也一起更新了其实完全没有。理解了这套结构后面遇到闪退或者卡在 loading applications 时你至少知道它卡在哪一环而不是抓瞎。2. 安装前的决策清单版本、路径与镜像站选包装 Anaconda 最大的坑不在安装过程本身而在安装前的三个决策装哪个版本、装到哪个路径、从哪下载。这三件事一旦选错后面可能要用一整天来补救。2.1 版本号怎么读新版本一定更好吗Anaconda 的安装包命名规则非常规整形如Anaconda3-年份.月份-构建号-平台-架构.exe。看到这个结构你就能判断出很多东西年份月份代表发行时间构建号是同一月份内的修订批次平台和架构决定它能不能装在你的机器上。历史上 Anaconda 沿用 Python 2 / Python 3 双线命名所以有Anaconda2-和Anaconda3-两种前缀Python 2 早已停止维护现在新装机一律选Anaconda3-开头的。关于要不要装最新版我的实测经验是不要盲目追最新也不要一直用三年前的老版本卡在发行时间长半年左右的版本通常最稳。原因很实际——Anaconda 的大版本更新经常伴随包版本大跳新版本刚发布时某些第三方包尤其是小众领域的科研包还没有对应的构建你装完发现某个库怎么也 conda 不上只能退回老版本重装。而太老的版本则会遇到 SSL 证书过期、仓库元数据格式不兼容之类的问题conda update会直接报错。选版本的正确姿势是先去镜像站看看有哪些版本再在社区里搜一下这个版本号有没有大规模踩坑记录。还有一个必须避开的雷不要下载所谓精简版绿色版免安装版的 Anaconda。这类包几乎都是第三方二次打包的产物去掉了原始的数字签名和部分组件轻则 Navigator 启动失败重则里面被塞了不明来源的东西。官方源和高校镜像站上的原始安装包足够快了没有理由冒这个风险。2.2 从镜像站挑包的完整操作路径国内直连 Anaconda 官方源下载安装包的速度经常只有几十 KB/s一个 3GB 的包能下到你怀疑人生。所以实际做法是走国内高校镜像站。以使用最广泛的清华 TUNA 镜像为例操作路径是这样的打开镜像站的 Anaconda archive 目录地址形如https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/。这个目录默认按文件名排序看起来比较乱。可以在地址后加上排序参数让列表按修改时间倒序排列最新的文件就排在最上面。常见的做法是附加?cmoa这样的查询串或者直接在列表页点击Last modified表头。在文件列表里筛选出符合你系统的文件。Windows 用户找-Windows-x86_64.exeIntel 芯片的 macOS 找-MacOSX-x86_64.pkgApple Silicon 机器找-MacOSX-arm64.pkgLinux 找-Linux-x86_64.sh。点击文件名进入下载或者复制链接用下载工具多线程下载。3GB 的包用浏览器单线程下得比较慢用下载器分片会快不少。下载完成后务必核对文件大小和官方页面上标注的字节数是否一致。镜像同步偶尔会中断下载到一半的安装包如果直接双击运行可能出现各种莫名其妙的解压失败。提示如果你只需要 conda 功能而不想要那一堆预装包可以直接在同一个镜像站的miniconda/目录下取 Miniconda 安装包体积只有十分之一。我见过最典型的翻车案例是有人从搜索引擎的广告位下载了一个Anaconda 高速下载器装完之后发现 Navigator 打开是另一个软件的推广页。这不是 Anaconda 的问题是下载渠道的问题。认准官方域名和高校镜像域名其余一律不碰这条原则能帮你躲掉九年义务教育都教不了的坑。2.3 安装向导每一页到底该怎么勾Windows 上的 Anaconda 安装向导有几页选项很多人一路 Next结果埋下隐患。逐页说一下我的选择逻辑安装路径页默认会装到用户目录下的Anaconda3。这里有个硬性建议——安装路径里绝对不要出现中文、空格和特殊符号。原因很底层conda 在解析环境路径时部分底层库对非 ASCII 路径的处理并不完善一旦路径里有中文可能出现包安装成功但导入报错、Jupyter 启动找不到内核等情况。我一般会改成D:\Anaconda3这种纯英文短路径顺便避开 C 盘空间压力。安装类型页只有你Just Me和所有用户All Users两个选项。选Just Me装到用户目录不需要管理员权限卸载也干净选All Users装到 Program Files会写系统级环境变量。我推荐Just Me因为 conda 的环境隔离机制本来就能解决多用户问题没必要往系统目录里塞。高级选项页这一页有两个复选框最关键第一个是Add Anaconda3 to my PATH environment variable官方默认不勾并且标注了红色警告。我的建议是新手保留不勾而是用后面会讲的conda init方式处理因为直接把 Anaconda 塞进系统 PATH 可能影响系统里其他 Python 程序的行为。第二个是Register Anaconda3 as my default Python建议勾上这样.py文件双击会关联到 Anaconda 的 Python。安装过程大约 5 到 15 分钟取决于磁盘速度。进度条卡在最后 5% 很久是正常现象它在解压那几百个包不要以为是死机了就强杀进程——我见过有人这么做结果装出来一个残缺的环境还得整个重来。3. 装完之后的第一次体检环境变量与基础验证安装完成不等于能用了。这一步要做的是体检把基础链路打通不然等到装包时报错你会分不清是网络问题、环境问题还是权限问题。3.1 Windows 下的验证顺序装完之后从开始菜单里找到 Anaconda Prompt注意不要用普通的 cmd 或 PowerShell先用 Anaconda Prompt 验证。因为 Anaconda Prompt 会预先激活 base 环境并配置好所有路径是最干净的验证环境。打开之后依次敲这几条conda --version python --version conda info第一条能输出 conda 版本号说明 conda 主程序可用第二条输出 Python 版本说明 base 环境解释器正常第三条会打印一堆信息重点看两处base environment的路径是否正确以及channel URLs列的是官方源还是你后面要改的镜像源。如果在这里就报 conda 不是内部或外部命令说明开始菜单的快捷方式没建好通常是安装过程被中断过。这种情况我一般直接重装比手工修环境变量快。接下来是普通终端里的验证。如果你想在 cmd 或 PowerShell 里也能用 conda需要配置环境变量。手工配置的话把这三个目录追加到用户 Path 里D:\Anaconda3 D:\Anaconda3\Scripts D:\Anaconda3\Library\bin顺序不能乱Scripts必须在Library\bin之前否则会出现 DLL 加载冲突典型症状是启动 Python 时报找不到 xxx.dll。Library\bin这个目录是 Windows 上最容易被漏掉的而它恰恰是 numpy、scipy 这些包的二进制依赖所在漏了它就会出现包装了但 import 失败。3.2 Linux 与 macOS 上的初始化方式Linux 服务器的安装流程更适合用命令行完成。上传或下载.sh安装包后bash Anaconda3-xxxx-Linux-x86_64.sh安装过程会问你安装位置默认是~/anaconda3。确认之后一路回车最后会问Do you wish the installer to initialize Anaconda3 by running conda init?这一步一定要选 yes它会自动往你的~/.bashrc里写入一段初始化脚本。如果当时手快选了 no后面就得手工处理。往~/.bashrc或~/.zshrc里追加# conda initialize __conda_setup$(/home/username/anaconda3/bin/conda shell.bash hook 2 /dev/null) if [ $? -eq 0 ]; then eval $__conda_setup else if [ -f /home/username/anaconda3/etc/profile.d/conda.sh ]; then . /home/username/anaconda3/etc/profile.d/conda.sh else export PATH/home/username/anaconda3/bin:$PATH fi fi unset __conda_setup # conda initialize 改完执行source ~/.bashrc生效。这里提醒一个新手常犯的错不要手工写export PATH~/anaconda3/bin:$PATH就完事。这样虽然python能用了但conda activate会因为缺少 shell hook 而报 CommandNotFoundError: Your shell has not been properly configured to use conda activate。一定要用conda init生成的那段脚本。还有一种情况是多用户服务器管理员装了 Anaconda 但普通用户没有写权限。这时候用户可以在自己的~/.bashrc里用source /opt/anaconda3/etc/profile.d/conda.sh的方式加载这样每个人有独立的环境目录互不干扰。3.3 换源把下载速度从 50KB/s 提到满速这一步是刚需。默认源在国内的下载体验非常差一个 pytorch 包能下半小时。配置.condarc文件来换源Windows 下这个文件在C:\Users\你的用户名\.condarcLinux/macOS 在~/.condarc。内容大致如下channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud nvidia: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud也可以用命令逐条加效果等价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/r conda config --set show_channel_urls yes注意channels的顺序就是优先级conda 会从上往下找包。另外.condarc是 YAML 格式缩进必须用空格不能用 Tab写错一个缩进整个文件就解析失败conda 会静默回退到默认源你会以为是镜像站挂了。改完之后执行conda clean -i清掉索引缓存再conda info看看 channel URLs 是否已经变成镜像地址。我第一次配完没清缓存折腾了二十分钟才发现它一直在读旧索引。4. Anaconda Navigator 更新与闪退排查实录这一节是整篇的核心因为这两个问题在搜索热度榜上长期霸榜。先说更新再说故障。4.1 Navigator 更新的三条路径与各自风险路径一界面内更新。打开 Navigator点左下角的齿轮图标进 Settings或者在应用卡片上找更新提示。这种方式最直观但成功率不稳定——如果它自己卡在加载状态你连更新按钮都点不到形成死循环。路径二命令行单独更新 Navigator。这是我最推荐的方式干净利落conda activate base conda update anaconda-navigator只更新 Navigator 这一个包不动其他依赖风险最小。如果更新后出问题还能用conda install anaconda-navigator旧版本号回退。路径三全量更新。conda update --all。这个命令我一般不推荐日常使用因为它会把 base 环境里几百个包一起升级求解时间可能长达十几分钟而且有概率出现依赖冲突导致某些包被降级或无法升级。它的适用场景只有一个你装的是很老的 Anaconda想一次性拉到较新的状态。执行前建议先conda list --revisions看看历史版本万一崩了可以conda install --revision N回滚。更新之前有件事必须做关闭所有基于 Anaconda 的程序包括 Jupyter Notebook、Spyder、以及后台运行的 Python 进程。Windows 上文件被占用时conda 更新会报 Permission denied然后留下一个半新半旧的状态比不更新还糟。实操心得我习惯在更新前把 base 环境的清单导出一次conda list --export base_backup.txt。真出问题时照着这个清单可以逐条重装比在论坛里翻帖子快得多。4.2 卡在 loading applications 到底是哪里堵住了Navigator 启动时会做几件事加载 conda 的配置、扫描本地环境列表、然后去远端请求一份可安装应用清单。卡在 loading applications通常就是最后这一步堵住了。按概率从高到低排查第一网络请求超时。这份应用清单默认从官方域名拉取国内访问经常超时。Navigator 在这块的处理不太友好它不会明确报网络超时就是一直转圈。解决办法是进 Settings把离线模式offline mode打开这样它跳过远端请求直接用本地缓存。代价是 Home 页面只显示已安装应用不再显示可安装应用——但你完全可以用命令行装包界面里少几个图标不影响工作。第二环境数量过多导致扫描慢。我见过一个同事有二十多个环境每个环境几百个包Navigator 每次启动要遍历所有环境的元数据启动时间超过三分钟看起来就像卡死。这种情况建议精简环境把不再用的删掉conda env remove -n 环境名或者干脆改用命令行。第三索引缓存损坏。执行conda clean -i清理索引再conda clean -t清理 tarball 缓存然后重启 Navigator。这个操作解决了相当一部分莫名其妙加载不出来的情况。第四安全软件拦截。某些安全软件会拦截 Navigator 发出的网络请求或者它对临时目录的写入导致进程挂起。如果排查到这一步临时关闭防护试一次能确认就直接把 Navigator 的安装目录加进白名单。第五直接绕过 Navigator。说实话我现在基本不用 Navigator 了。环境管理全部走命令行启动应用用jupyter notebook、spyder直接敲。Navigator 是给新手降低门槛用的当你熟悉 conda 命令之后它的价值就下降得很快而它带来的故障面却一直存在。4.3 闪退问题的日志读法与三步定位法Navigator 闪退比卡住更让人抓狂因为窗口一闪就没了什么信息都看不到。破局的关键是拿到 traceback。第一步从命令行启动。打开 Anaconda Prompt直接输入anaconda-navigator这样启动的话如果崩溃错误堆栈会直接打印在终端里。这一步能解决 80% 的排查需求因为绝大多数闪退原因都会在堆栈里露出来。第二步读日志文件。日志通常在用户目录下的.anaconda\navigator\logs\navigator.logWindows。翻到最后一次启动的时间点看有没有 ERROR 级别的记录。第三步按错误类型对号入座。常见的闪退原因就这么几类报错关键词根本原因处理方式PyQt5 / PySide2 相关Qt 绑定版本冲突常见于混装过 pip 包重装 Navigato r及其 Qt 依赖UnicodeDecodeError用户名或安装路径含中文新建英文用户账号或改安装路径DLL load failedLibrary\bin 未加入 PATH 或被杀软隔离补全环境变量检查隔离区MemoryError / 无输出环境过多导致扫描内存爆掉精简环境或改命令行直接没有任何输出安装包本身损坏用校验和核对安装包后重装针对 Qt 冲突这一类我有一套常用的修复组合拳在 base 环境里依次执行conda activate base conda install -c anaconda anaconda-navigator --force-reinstall conda install -c anaconda pyqt --force-reinstall如果还是不行可以试着重置配置anaconda-navigator --reset这个参数会把 Navigator 的用户配置恢复成初始状态代价是你之前的界面偏好和设置会丢但不影响环境本身。重要提醒如果 base 环境里曾经用 pip 装过 PyQt5、PySide 类的 GUI 库那 Qt 冲突的概率极高。base 环境是 Anaconda 的系统盘尽量只用 conda 管理不要往里塞 pip 包。这是我踩过最多次的坑也是我后来养成所有业务都开新环境这个习惯的直接原因。5. 虚拟环境从创建到销毁的完整生命周期环境是 conda 的核心能力用熟了能省掉大量扯皮。我按生命周期拆开讲。5.1 创建与激活的正确姿势创建环境时一定要指定 Python 版本conda create -n myproject python3.11如果不指定conda 会给你最新的 Python而很多科研包对高版本 Python 的支持是滞后的可能装不上。指定版本能让依赖求解器更快收敛也避免后续回退的麻烦。创建完激活conda activate myproject激活之后命令行前面会出现(myproject)提示符这是最直观的验证。查看所有环境用conda env list退出当前环境用conda deactivate。关于环境命名我有两条经验一是名字里不要用中文和空格二是名字最好能表达用途和 Python 版本比如cv-torch-py311、geo-gdal-py39。等你有了十几个环境光看名字env1、env2、test根本分不清谁是谁最后只能一个个进去pip list看非常浪费时间。另外创建环境时可以顺手装几个基础包conda create -n myproject python3.11 numpy pandas matplotlib -y-y参数自动确认避免中途还要敲一次 y。这个过程 conda 会做依赖求解输出一堆将安装以下包的列表建议扫一眼看看有没有哪个包被降级到不合理的老版本——这是发现潜在冲突的好时机。5.2 在这个环境里装包conda 与 pip 的交替顺序装包的黄金法则是先用 conda 把能装的装完最后再用 pip 补缺口。顺序反了就会出问题如果你先用 pip 装了一个包之后 conda 求解依赖时看不到 pip 装的包可能会安装一个不同版本覆盖掉造成潜在的文件冲突。一个比较稳的工作流conda activate myproject conda install numpy scipy pandas pip install 某个conda仓库里没有的包如果你不确定某个包在不在 conda 仓库里可以先搜conda search 包名搜不到再考虑 pip。另外装包时如果遇到 PackagesNotFoundError八成是 channel 配得不对。可以临时指定conda install -c conda-forge 包名conda-forge是社区维护的通道包覆盖范围比默认通道广得多版本也更新。我现在的习惯是把 conda-forge 加到.condarc的默认通道里省得每次都敲-c。避坑经验永远不要在 base 环境里conda install一大堆业务包。我见过有人把一个深度学习项目直接装在 base 里后来另一个项目需要不同版本的 torch两个需求打架最后只能把整个 Anaconda 卸载重装。一个项目一个环境这条纪律比任何技巧都重要。5.3 导出、迁移与删除环境配好了要给别人用或者要部署到服务器靠口头说装哪些包是不现实的。标准做法是导出环境文件conda env export environment.yml但这里有个坑默认导出的文件里会带平台标识和精确的 build 号在 Linux 上导出的文件拿到 Windows 上会直接装不上。更通用的做法是加参数conda env export --no-builds environment.yml或者只导出你显式安装过的包忽略间接依赖conda env export --from-history environment.yml--from-history导出的文件更简洁跨平台重建的成功率也更高。别人拿到文件后conda env create -f environment.yml就能重建一个几乎一样的环境。删除环境则用conda env remove -n myproject或者conda remove -n myproject --all两者等价。删除操作不可逆执行前用conda env list确认名字别把辛苦配好的环境手滑删掉——我自己干过一次那个环境里有一堆编译起来很麻烦的科研包重配花了半天。6. 用 conda 配置 PyTorch 环境的完整过程与版本匹配逻辑PyTorch 环境配置是搜索量最大的需求之一也是版本匹配最容易出错的地方。这一节把逻辑讲透。6.1 显卡驱动、CUDA 版本与框架版本的三层关系很多人搞不清nvidia-smi显示的 CUDA 版本和 PyTorch 需要的 CUDA 版本是什么关系。记住这个层级显卡驱动决定你能支持的最高 CUDA 运行库版本PyTorch 安装包自带它所需的 CUDA 运行库两者只要满足框架所需版本不高于驱动支持上限就能跑。先用nvidia-smi看一下驱动信息右上角会有一行类似 CUDA Version: 12.x 的字样。这个数字是驱动能够支持的最高版本不是你已经安装了某个版本。比如显示 12.4那你装 CUDA 11.8 或 12.1 版本的 PyTorch 都可以因为驱动向下兼容。对应的选择建议驱动支持的 CUDA 上限建议选择的 PyTorch CUDA 版本说明11.711.6 / 11.7保守选择兼容性最好12.0 及以上11.8生态最成熟社区资料最多12.2 及以上12.1较新的卡和新特性支持另外要特别注意nvidia-smi里的 CUDA 版本和nvcc --version显示的版本是两回事。前者是驱动能力后者是你本地装的开发工具链版本。用 conda 装 PyTorch 时不需要本地有 nvcc因为 conda 会连带装上cudatoolkit运行时。6.2 创建环境并安装的完整命令先建一个专用环境conda create -n torch-py311 python3.11 conda activate torch-py311然后用官方通道安装这里以 CUDA 11.8 为例conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia如果你配的镜像源里已经包含了 pytorch 和 nvidia 通道可以去掉后面的-c参数速度会快很多。CPU 版本则用conda install pytorch torchvision torchaudio cpuonly -c pytorch装完之后有一个必做的验证import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))第一行输出框架版本第二行必须是True第三行输出显卡型号。如果第二行是False说明装的是 CPU 版本或者 CUDA 版本与驱动不匹配。这时候不要急着卸载重装先执行conda list | findstr cudatoolkitLinux 用grep看看运行时包在不在。缺了的话补装对应版本即可。实测经验conda 安装 PyTorch 时如果镜像源同步不及时可能会出现 找不到满足条件的包 而自动降级到 CPU 版本而且它不会明显提示装完is_available()才发现是 CPU 版。所以装完一定要跑那三行验证代码这是我每次配环境雷打不动的动作。如果想用 pip 装方式也类似但要指定 CUDA 版本的索引pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118pip 装的好处是版本更新更快坏处是不管非 Python 依赖在 Windows 上偶尔会有 DLL 问题。我个人的习惯还是 conda 优先。6.3 验证环境时容易踩的三个细节细节一验证脚本必须在激活的环境里跑。有人在系统终端里直接python test.py跑到一半发现是另一个环境的解释器白折腾。养成习惯敲python -c import sys; print(sys.executable)确认解释器路径。细节二PyCharm 和终端可能用的是两个不同的解释器。这是下一节要展开的重点很多命令行跑得通、IDE 里跑不通的问题都源于此。细节三多卡机器的设备序号。用torch.cuda.device_count()看卡数训练脚本里用CUDA_VISIBLE_DEVICES环境变量指定要用哪几张卡别默认全占容易和别人的任务抢资源。7. 编辑器侧配置PyCharm 绑定 Conda 解释器的关键步骤环境配好了接下来要让 PyCharm 用上它。这一步的坑集中在绑定错了对象。7.1 绑定 Conda 解释器的标准操作打开 PyCharm进入File → Settings → Project → Python InterpretermacOS 在PyCharm → Preferences下。点右侧齿轮选 Add Interpreter选 Conda Environment然后选择 Existing environment在 Interpreter 那一栏找到你的环境路径Windows: D:\Anaconda3\envs\myproject\python.exe Linux/macOS: /home/username/anaconda3/envs/myproject/bin/python这里最关键的一点是一定要指向envs目录下的 python.exe而不是 Anaconda 根目录下的那个。根目录下的是 base 环境指向它等于没用你新建的环境你装的 torch 全都不在import 自然失败。这个错误太常见了我几乎每次帮人排查都要先看一眼解释器路径。绑定完成之后PyCharm 底部的状态栏会显示当前解释器名字Terminal 里也会自动激活对应环境新版 PyCharm 支持这个特性。此时在 IDE 里跑一段import sys; print(sys.executable)输出路径应该和你在设置里选的一致这就说明绑定成功了。如果 conda 环境列表在 PyCharm 里加载不出来通常是 conda 可执行文件路径没配对。在 Conda executable 那一栏手动指定Windows: D:\Anaconda3\Scripts\conda.exe Linux/macOS: /home/username/anaconda3/bin/conda7.2 命令行能跑PyCharm 报 ImportError 的四类原因这类问题我整理过基本逃不出这四种原因一解释器指错。前面说的指向 base 而不是envs下的环境占了大概一半的比例。原因二包的导入路径本身就不对。比如社区里常见的一个报错ImportError: cannot import name mesh from simpeg这看起来像是没装包其实往往是包的版本不匹配——某个子模块在新版本里被重命名或移到了子包里而你的代码是按旧版本的 API 写的。这类问题的排查方式是conda list | grep 包名 python -c import 包名; print(包名.__file__)先确认装的是哪个版本再去查这个版本的文档里对应子模块该怎么导入。千万不要一看到 ImportError 就无脑 pip install 一遍那只会让环境更乱。原因三包装在了另一个环境里。你在终端 A 环境装了包PyCharm 指向 B 环境自然找不到。用conda env list对比一下就能确认。原因四PyCharm 的索引没刷新。有时候包确实装好了但 IDE 的缓存还是旧的。执行File → Invalidate Caches / Restart重启之后通常就正常了。7.3 终端、IDE 与 Jupyter 三方对齐一个项目里通常有三个地方在跑 Python系统终端、PyCharm、Jupyter Notebook。如果三者的解释器不一致你会遇到同样一份代码换个地方跑就报错的诡异情况。我的做法是统一到一个环境。PyCharm 里绑定好的环境在 Terminal 标签页里确认一下which pythonWindows 用where python指向的是不是同一个。Jupyter 那边则需要在该环境里装一个内核conda activate myproject conda install ipykernel python -m ipykernel install --user --name myproject --display-name Python (myproject)这样 Jupyter 的 Kernel 菜单里就会出现你的环境新建 notebook 时选它即可。如果不装 ipykernelJupyter 里默认用的是 base 环境你装在新环境里的包在 notebook 里就是导入不了很多人卡在这里很久都想不通。一个省事的技巧用python -m jupyter notebook而不是直接jupyter notebook启动前者会使用当前激活环境里的 jupyter天然对齐不需要额外配内核。8. 常见问题速查表与清理卸载的稳妥做法把前面散落的经验汇成一张表方便出问题时直接对照。8.1 高频问题速查现象最可能原因快速验证方式处理动作终端提示 conda 不是命令PATH 未配置where conda补 Scripts 与 Library\binconda activate 报 CommandNotFoundError未执行 conda init查看 .bashrc执行 conda init 后重载激活环境时出现未激活警告直接用了解释器全路径看警告原文改用 conda run 或先 activate安装包极慢或超时未换镜像源conda info看 channel配 .condarc 后清索引求解依赖耗时极长通道过多、环境过旧观察 Solving 阶段减少通道新建干净环境Navigator 打不开Qt 冲突或配置损坏命令行启动看堆栈重装 navigator 与 pyqt卡在 loading applications远端清单请求超时断网试启动开启离线模式import 报 DLL load failedLibrary\bin 缺失查 PATH补环境变量装了包但 import 不到解释器指错环境打印 sys.executable改指 envs 下解释器磁盘占用暴涨缓存与旧包堆积conda clean --dry-run执行 conda clean -aconda clean这一套值得单独说。它会清理三类东西索引缓存、下载的 tarball 包、以及不再被引用的解压包。跑一次conda clean -a通常能释放几 GB 到十几 GB我每隔一两个月就会执行一次尤其是频繁装深度学习框架的机器。8.2 卸载 Anaconda 的完整流程卸载之所以值得专门讲是因为卸载不干净会导致重装后出现各种灵异问题比如新装的环境里居然能 import 到旧版本的包。Windows 上的干净卸载步骤用官方卸载程序在安装目录下找Uninstall-Anaconda3.exe运行而不是从添加或删除程序里直接删目录。检查并删除残留目录安装目录、C:\Users\用户名\.conda、C:\Users\用户名\.condarc、C:\Users\用户名\.anaconda、C:\Users\用户名\.ipython、C:\Users\用户名\.jupyter。这最后几个目录里存着配置和内核信息不删的话重装后 Jupyter 会认到旧内核。清理环境变量把 Path 里所有包含 Anaconda 的条目删掉。检查开始菜单快捷方式目录手工删除残留项。Linux/macOS 上更简单rm -rf ~/anaconda3 rm -rf ~/.condarc ~/.conda ~/.continuum然后编辑~/.bashrc把conda initialize那一段注释块整体删掉执行source ~/.bashrc。别忘了检查~/.config/下有没有 jupyter 相关目录。血泪教训有一次我卸载时漏了.conda目录重装之后新建的环境莫名其妙继承了旧环境的包列表排查了两个小时才找到原因。卸载的检查清单比安装的检查清单更重要。8.3 让整套工具链长期保持健康的几条纪律折腾了这么多次我总结出几条自己一直在执行的规矩分享出来纪律一base 环境只当系统盘。除了 conda 自身、Navigator、Jupyter 这类工具不往里装业务包。这样 base 出问题的概率大幅降低而且conda update --all也不容易崩。纪律二一个项目一个环境环境名写清用途。别嫌麻烦conda create只要几秒钟重建环境可能要几小时。纪律三pip 和 conda 不混用同一个包。装之前先用conda list看一眼这个包是不是已经由 conda 装过了。纪律四装完关键框架立刻验证。三行代码确认 GPU 可用比写完训练脚本跑一半才发现是 CPU 版本要省事得多。纪律五环境配好后立刻导出 yml 并在 Git 里提交。environment.yml和代码一样重要它是你环境唯一可复现的记录。我现在的习惯是每个项目的仓库根目录都放一份换机器时几条命令就能恢复。这套流程走下来绝大多数所谓的Anaconda 玄学问题其实都会变成有明确原因、有明确解法的普通故障。真正难搞的从来不是工具本身而是不知道它内部在做什么——把 conda 的通道机制、环境隔离机制、以及 PATH 的作用搞清楚剩下的都是查日志的体力活。
返回列表