ARTICLE DETAIL

资讯详情

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

Conda环境配置报错:PyCharm提示envs_dirs未初始化修复指南

Conda环境配置报错:PyCharm提示envs_dirs未初始化修复指南 1. 问题定位这个报错到底在说什么先看最让人头疼的报错原文latinit property envs_dirs has not been initialized...很多人第一次遇到这个弹框第一反应是PyCharm坏了、Conda坏了、或者两者兼容性出了大问题。实际上这个报错里面的“latinit”是conda内部配置模块的笔误或者说代码命名问题真实含义是conda在读取libmamba或conda核心配置里的envs_dirs属性时发现这个属性还没有被初始化。这里要解释一下背景。PyCharm在配置Conda环境时并不是直接调用conda的可执行文件那么简单。它会通过conda的Python API去读取conda的配置信息比如环境目录列表envs_dirs、默认环境路径等。PyCharm要把你在Anaconda里创建的那些虚拟环境全部列出来就需要让conda回答“你的环境都放在哪里”。如果conda自己初始化失败、配置文件损坏、或者环境变量指向了不存在的路径那么conda回答不上来PyCharm就弹这个框。我在实际处理这类问题时总结了一句话这个报错十有八九不是PyCharm的锅而是conda自身在启动阶段就出现了问题PyCharm只是恰好把conda的内部错误暴露了出来。所以修这个问题的第一原则就是先绕开PyCharm直接回到conda命令行本身做体检。那么问题来了conda命令能正常用吗很多人遇到这个报错其实PyCharm里完全没法选环境但打开终端敲conda env list居然一切正常。这就更有意思了——说明conda主体没坏坏的是某个配置分支PyCharm走了那条坏分支就撞上了“envs_dirs未初始化”。用生活化的类比来说这就好比你想去图书馆借书图书馆的目录系统本身没坏但接待台的人工服务那边扫了一个错误的二维码扫不出来就说“这本书的信息不存在”实际上书就在架子上。PyCharm就是那个接待台conda的配置模块是那个二维码。接下来我会按诊断顺序从命令行到配置文件再到PyCharm设置完整走一遍修复流程。你在实际操作时不要跳步很多坑就是因为跳过了某个诊断步骤结果反复改出来新问题。2. 先做三件事验证conda本体健康状况千万不要一上来就重新安装Anaconda那是重武器副作用大而且不一定能解决问题。我见过太多人在网上搜到“重新安装Anaconda就好了”的帖子结果装完后原来的环境全乱了新问题一箩筐。正确的做法是先用最小的成本做好诊断通常三步就够了。2.1 第一步确认conda命令本身能不能正常响应打开一个全新的终端窗口注意是全新的不是当前已经开着的那个。如果是在Windows上最好用管理员身份打开CMD或者PowerShellmacOS和Linux用户直接用bash或zsh即可。先敲conda --version正常情况会输出类似conda 4.14.0或conda 23.x.x之类的版本号。如果这一步就提示conda不是内部或外部命令说明当前终端的PATH环境变量里根本没有conda。但注意如果你在PyCharm里打开Terminal去敲命令PyCharm的Terminal环境和你系统的终端环境不一定一样所以测试时必须用系统自带的终端。接下来这个命令更关键conda config --show envs_dirs这个命令会直接输出当前conda所识别的环境目录列表。正常情况下你会看到类似这样的输出envs_dirs: - C:\Users\你的用户名\.conda\envs - C:\ProgramData\Anaconda3\envs请注意这个命令的返回结果能极大帮助判断问题定位。如果这条命令报错而且报错信息里出现了和envs_dirs has not been initialized类似的字样那基本可以确定是conda的配置读取层出了问题。如果这条命令正常说明conda大体上是健康的问题出在PyCharm与conda交互的某个环节上。2.2 第二步检查环境变量是否指向了实际的conda安装路径很多情况下envs_dirs没有正确初始化是因为系统环境变量里出现了互相矛盾的配置。具体要检查的是这几个CONDA_ROOT如果这个变量存在它指的是conda实际安装根目录CONDA_PREFIX如果这个变量存在它指的是当前激活的环境路径CONDA_ENVS_DIRS如果这个变量存在它指的是conda环境存放目录PATH其中必须包含conda根目录和Scripts目录其中最容易出问题的是CONDA_ENVS_DIRS。我遇到过一个case用户之前折腾过conda换源把CONDA_ENVS_DIRS设置成了D:\tools\conda\envs结果后来他重装了Anaconda这个变量却还留在系统环境变量里指向了一个根本不存在的路径。conda启动时一读这个变量发现路径无效内部的envs_dirs初始化步骤就崩了然后PyCharm一访问就报错“latinit property envs_dirs has not been initialized”。在Windows上检查环境变量echo %CONDA_ROOT% echo %CONDA_PREFIX% echo %CONDA_ENVS_DIRS%在macOS或Linux上echo $CONDA_ROOT echo $CONDA_PREFIX echo $CONDA_ENVS_DIRS如果某一个变量输出的路径不是有效路径建议先打开“系统属性 → 环境变量”面板把对应的变量删除或者改成真实路径。注意如果CONDA_ENVS_DIRS这个变量本身没有生效但在C:\Users\你的用户名\.condarc这个配置文件里写了envs_dirs那么配置文件里的内容优先级更高。这里又涉及一个容易混淆的点conda读取环境变量的优先级低于读取配置文件所以你还得检查.condarc。2.3 第三步检查.condarc配置文件有没有语法错误或坏条目.condarc是conda的核心配置文件放在用户主目录下内容控制着channel、envs_dirs、pkgs_dirs等一系列参数。它在conda启动时会被读取如果文件里存在不支持的键名、格式错误、编码异常conda初始化就会出问题。打开配置文件conda config --show-sources这条命令会告诉你conda从哪些地方读取配置以及文件的位置。正常情况下你会看到.condarc的完整路径。然后直接打开这个文件Windows上是在C:\Users\你的用户名\.condarcmacOS/Linux是在~/.condarc。常见的问题我有几个亲身经历过的文件里用了中文引号或中文冒号这是诡异的错误源通常是你从一些博客复制粘贴别人写的配置时带入的。比如channels:https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main这种情况看似没问题实际上引号是中文全角引号。文件里写入了带空格的路径但是没有加引号或者加了引号但是编码不对。channels节点下面同时出现了多条冲突的源尤其是所谓的“阿里源”和“清华源”混写有些源的路径已经不适用了。ssl_verify: false和default_channels写错层级conda读取时认为配置项无效。如果你不确定.condarc是否有问题最保险的做法是直接备份后重建conda config --remove-key envs_dirs conda config --remove-key channels或者手动备份mv ~/.condarc ~/.condarc.bak然后重新创建一个空的.condarc先不写任何内容。做完之后重新验证conda config --show envs_dirs如果这次能正常输出目录列表说明之前的配置文件坏了。接下来怎么重新配置源和目录我会在第3部分展开讲。诊断部分做完你已经掌握了问题的具体形态。接下来要做的就是修复核心有三条路径修复.condarc、清理环境变量、重置conda init状态。3. 修复方案详解三种情况三种手法根据我处理大量案例的经验这个报错基本可以分为三种情况每种情况的修复手法不一样。有的人只需要其中一种就能搞定有的人需要组合两种或三种方法。3.1 情况一.condarc配置损坏主动重建这是最常见的情形症状表现为conda config --show envs_dirs报错且报错内容和PyCharm里的弹框高度一致。重建配置是首选方案。具体步骤第一步备份原配置。不要在着急修复时直接删文件备份会让你有后悔药可吃。Windows下打开CMDcopy C:\Users\%USERNAME%\.condarc C:\Users\%USERNAME%\.condarc.bakmacOS/Linuxcp ~/.condarc ~/.condarc.bak第二步删除或清空配置文件。如果你不确定哪个键是罪魁祸首可以先不删除全部只注释掉可疑的内容。在.condarc里#是注释符号。比如这样操作之后文件长这样# channels: # - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main # envs_dirs: # - D:\tools\conda\envs保存后重新跑conda config --show envs_dirs如果正常再一行一行放开找到是哪一个键导致的问题。但说实话这种“二分法”排查在配置只有几行时效率并不高。更快的方式是直接重命名配置文件让它暂时失效mv ~/.condarc ~/.condarc.bak这样conda会使用默认配置。默认配置下envs_dirs通常是用户主目录下的.conda\envs和conda安装目录下的envs。此时再跑conda config --show envs_dirs大概率能正常输出。第三步重新配置necess必要内容。重建之后如果你之前的conda换了国内源这里泛泛而谈即可不特别点名具体镜像站需要重新写入。建议至少别写cs源之外的奇怪源。一个相对稳妥的.condarc模板可以是channels: - conda-forge - defaults envs_dirs: - C:\Users\你的用户名\.conda\envs pkgs_dirs: - C:\Users\你的用户名\.conda\pkgs注意注意再注意文件保存编码务必选择UTF-8文件行尾换行符用LF或CRLF都无所谓但编码错了conda会读出一堆乱码。如果你是Windows用户建议用记事本的“另存为”功能编码选UTF-8。3.2 情况二环境变量残孤残根导致定位错误如果你的.condarc是完好的但envs_dirs依然初始化失败那么极有可能是系统环境变量里存在CONDA系列变量指向了错误的路径。尤其是你以前安装过其他版本的Anaconda、Miniconda或在团队迁移时复制过系统环境变量很容易留下一些残存的CONDA变量。处理方案很简单在Windows上打开系统环境变量编辑器找到“系统变量”和“用户变量”两组把所有带有CONDA前缀的变量逐个审查一遍。保留以下几类即可CONDA_HOME或CONDA_ROOT指向当前正在使用的conda根目录CONDA_EXE指向conda.exe完整路径conda安装后通常会自己维护这个变量CONDA_ENVS_DIRS如果之前是你手动设的建议直接删掉让conda自己根据安装位置推导剩下的比如CONDA_PREFIX、CONDA_PREFIX_1、CONDA_SHLVL这些通常是进入某个conda环境后被自动写入的不应该常驻在系统环境变量里。如果它们出现说明之前有人激活conda环境后直接把环境变量同步到了系统级别这是典型的坏配置。把这些都删掉只保留指向当前conda安装路径的那一两个变量。macOS和Linux上检查shell配置文件~/.bashrc、~/.zshrc、~/.bash_profile中的export CONDA_开头的行。出现多个版本conda混用的时候我建议你彻底清理只保留一个conda的全部初始化代码块也就是“conda initialize”那段脚本。如果你之前手动添加过export CONDA_ENVS_DIRS...直接删掉这行。清理完环境变量后记住要重新开启一个终端窗口才会生效。然后用之前提到的验证命令再跑一次conda info --envs如果输出正常看到类似base、env1、env2这样的列表说明conda的环境发现机制已经恢复正常。3.3 情况三conda初始化状态异常需要重新init还有一种不常见但确实存在的情况conda命令能执行环境变量也没问题.condarc干净得跟白纸一样可PyCharm就是报错。此时我建议你把conda的init状态重置一下。很多人以为conda init只是给shell加几行代码实际上它还会修复conda内部的一些注册信息。你可以这样做conda init --all然后重启终端再看看conda能不能正常响应conda config --show envs_dirs conda -V如果这两条都能正常输出大概率PyCharm那边也能恢复。如果conda init --all报了权限错误在Windows上请以管理员身份重新打开终端macOS/Linux上请检查当前用户对conda安装目录是否有写权限。这里有个操作陷阱conda init --all可能会往你的shell配置里写内容如果之前你已经在使用新的shell比如PowerShell 7要在PowerShell里执行conda init powershell。别在CMD里跑了一遍还疑惑为什么PowerShell里没有生效。如果重置conda init之后PyCharm依然报错那么我们需要把注意力转向PyCharm本身的配置方式。接下来就聊聊在PyCharm里怎样正确地跟conda对接。这个环节最容易踩坑很多读者卡在这里反复重装PyCharm也没解决问题。4. PyCharm配置conda环境的正确打开方式当你把conda命令行状态修好之后接下来在PyCharm里的配置就很关键了。选错入口、选错文件、或者在旧设置里留下了脏配置都会导致“选择不了conda路径”的弹框再次出现。4.1 彻底清理PyCharm里的历史错误配置修复之前先清理PyCharm对conda相关目录的旧记忆。这一步很关键因为PyCharm会缓存曾经检测过的conda信息。如果你之前一直在报错它可能存了很多错误状态即使conda已经修复PyCharm还会继续引用那些缓存。操作入口是File → Settings → Project → Python Interpreter。在这里可以看到当前项目的解释器配置。点击右侧的齿轮图标选择“Show All”。在弹出的Interpreter列表中把凡是标红、报错、路径无效的条目全部删除。然后点击“Add Interpreter → Add Local Interpreter”。这一步注意PyCharm 2023及之后的版本UI和旧版本略有出入但核心选项是一样的。弹出来的对话框里要选择Conda Environment而不是Virtualenv Environment。很多人在这里选错导致后续一系列问题。在Conda Environment的界面里第一个下拉框通常叫“Environment”选择“Existing environment”然后在“Interpreter”右侧点击浏览按钮。此时你要定位的并不是conda安装根目录而是conda.exe所在的那个Scripts目录里的解释器文件。这里有讲究。在Anaconda的标准安装中解释器路径是这样的C:\ProgramData\Anaconda3\python.exe而conda可执行文件路径是这样的C:\ProgramData\Anaconda3\Scripts\conda.exePyCharm的Conda Environment界面里“Conda executable”一栏要填的是conda.exe的路径“Interpreter”一栏要填的是python.exe的路径。很多人图省事只填了conda路径然后点确定PyCharm就提示检测不到环境。这就像你给修车师傅说“我的车坏了”却没告诉他车的型号和年份——他知道要修车但不知道从哪儿入手。如果你已经确定了conda.exe路径是错的PyCharm又跳窗报错有一个偏门但非常好用的办法直接在“Conda executable”路径栏手动输入C:\ProgramData\Anaconda3\Scripts\conda.exe即便PyCharm没有自动识别到也别放弃输入完按一下回车停顿几秒PyCharm会重新读取conda的环境列表。4.2 直接在Existing Environment里手工指定python解释器如果Conda Environment模式始终弹框我建议你跳过它直接用“Existing environment”模式手动指定一个虚拟环境里的Python解释器路径。这么做绕过了conda API的接口调用不依赖envs_dirs初始化。具体操作在Add Local Interpreter对话框里选择Existing environment然后Interpreter右侧的浏览按钮定位到你某个conda虚拟环境下的python.exe。例如你有一个叫tf的环境路径通常是C:\ProgramData\Anaconda3\envs\tf\python.exe或者你装在用户目录下C:\Users\你的用户名\.conda\envs\tf\python.exe选中后PyCharm会自动识别这个环境的包列表。这种方法的本质是告诉PyCharm“别去找conda了直接用这个python跑项目”。它牺牲了PyCharm自动管理conda环境列表的便利性但换来了极大的稳定性。对于只是想跑通一个项目、又不想跟conda报错死磕的读者这是我的首选推荐方案。我之前遇到过一位读者他通过这种方式成功配置后PyCharm里所有项目都能正常切换解释器了唯一的代价是新建项目时不能直接从下拉列表选中conda环境而是要把环境中python.exe的路径复制粘贴过去。但对于大多数工作流来说这完全可接受。4.3 在PyCharm中新建环境 vs 已有环境的选择还有一部分读者遇到的不是报错而是PyCharm里看不到任何conda环境。在Conda Environment下选择New environment时PyCharm会试图在你指定的目录里创建一个新环境。它会自动调用conda create命令。如果conda状态有问题这一步同样会触发envs_dirs初始化错误。我的建议很明确前期排查阶段不要选择New environment一律选Existing environment。等conda在命令行下彻底修复确认conda create -n test python3.8能正常建环境了再用New environment也不迟。New environment创建时PyCharm默认会在conda的默认envs目录下创建环境。至于这个默认目录到底在哪就取决于我们之前排查看的envs_dirs配置。所以你会发现把命令行下的envs_dirs理顺了PyCharm的New environment功能自动就好了。4.4 手工指定conda路径时最容易被忽略的四个细节细节一PyCharm专业版和社区版在Conda配置上几乎没有差别操作路径完全一致。如果你在网上下载的“激活教程”里看到说要改什么破解补丁来支持conda那都是不靠谱的。社区版完全够用。细节二如果你在Windows上使用的是Miniconda而不是Anaconda路径结构略有差异。Miniconda的Scripts目录同样是conda.exe所在的地方但envs目录通常默认在Miniconda3根目录下。注意路径不要搞混。细节三PyCharm会记住你曾经配置过的所有解释器路径即使那个项目已经删了。时间一长列表里会堆很多无效路径这会影响PyCharm的检测速度也容易造成误判。建议每隔一段时间清理一下。细节四如果PyCharm里配置Conda时弹窗提示“Conda executable is not found”请检查你的conda.exe是否被某个安全软件或杀毒软件隔离了。我在处理case时遇到过几次明明Conda安装目录是好的conda.exe却不见了。这种情况不是配置问题是软件被误删需要去杀毒软件的隔离区恢复。5. 实操过程记录一次标准修复的完整流程如果你不想零散地看每个小技巧我建议你照着一份完整的修复流程走一遍。下面是我最近处理一个线上案例时的完整实操记录读者可以当作“抄作业”的模板。场景描述Windows 11Anaconda安装在C:\ProgramData\Anaconda3Python 3.9环境PyCharm 2023.3社区版。用户反馈打开PyCharm设置Python解释器时弹框显示latinit property envs_dirs has not been initialized。第一步我打开了一个新的CMD终端输入conda info --envs输出结果正常能看到base以及用户之前创建的pytorch、cv等环境。这说明conda主体是好的。第二步输入conda config --show envs_dirs此时居然也正常输出了目录。这让我有点意外因为PyCharm里报错而命令行不报错通常说明问题出在PyCharm与conda交互的那一层。第三步我尝试在PyCharm里点击Add Interpreter选择Conda Environment并在“Conda executable”里填入了C:\ProgramData\Anaconda3\Scripts\conda.exe点击Load Environments。PyCharm弹框报错。这说明问题在PyCharm调用conda环境的接口上。第四步我回到命令行执行conda config --show-sources惊讶地发现配置来源里除了.condarc还有一个C:\ProgramData\Anaconda3\.condarc文件。这个目录下的.condarc通常被大多数人忽略。我立刻查看内容发现里面写着envs_dirs: - C:\Users\admin\AppData\Local\Temp\tmp5h3i9这个临时目录早已不存在。问题迅速明确了Anaconda安装目录下的.condarc里envs_dirs指向了一个失效的临时路径conda在初始化时尝试读取这个目录发现目录不存在于是envs_dirs属性初始化失败。但你猜怎么着命令行里的conda config --show envs_dirs居然能正常输出这说明conda在给PyCharm提供的API路径和给普通命令行的路径走的不是同一套初始化流程。我修改了C:\ProgramData\Anaconda3\.condarc把失效的路径删掉只保留默认的envs目录。然后重启PyCharm再配置Conda解释器环境列表瞬间加载出来了报错消失。这个case给我们的启发非常直接排查conda配置问题时一定不要只看用户主目录下的.condarc还得去conda安装目录下找另一个.condarc。这在Windows上尤为常见因为很多安装工具在部署Anaconda时会在安装目录下生成一份配置这份配置的优先级在某些场景下甚至比用户主目录的配置更高。再分享一个我自己的习惯修复完所有配置后我会强制PyCharm删除缓存并重启。操作路径是File → Invalidate Caches / Restart。这个操作会清掉PyCharm所有之前的解释器检测缓存、conda环境列表缓存。对于PyCharm与conda对接的问题这一招能解决部分“修好了还报错”的顽固现象。6. 常见问题与排查技巧实录写到这里相信你对这个报错已经有了非常清晰的认识。为了让你以后遇到类似问题能快速应对我整理了一份速查表式的问题排查清单。这些全部来自一线实操绝不是网上复制粘贴的官方文档。典型现象根本原因验证方法处理方案PyCharm里选择Conda环境弹envs_dirs错误conda配置里的envs_dirs指向了失效路径检查用户目录和conda安装目录下的.condarc修复或删除失效路径配置cmd里conda正常PyCharm里不行PyCharm的缓存或isolation模式下读取了不同配置来源查看PyCharm的Invalidate Caches执行Invalidate Caches并重启conda config --show envs_dirs本身报错.condarc格式错误或中存在坏条目运行conda config --show-sources备份并重建.condarcPYCHARM提示找不到conda executable系统中存在多个conda环境变量指向错误版本检查CONDA_EXE变量和PATH清理无效的环境变量项目里Python解释器配置正常但无法加载conda环境列表conda初始化脚本未正确写入shell配置运行conda init --all重新初始化conda并重启终端列表里所有conda环境都能显示但新建环境失败指定的envs路径没有写权限检查envs_dirs指向的目录权限将envs_dirs指向用户有写权限的目录Linux服务器上通过SSH配置PyCharm远程解释器弹envs_dirs错误远程机器上的conda配置损坏在远程终端执行conda config --show envs_dirs按命令行修复方法处理远程conda配置这里还要单独强调一个很容易踩坑的场景当你使用PyCharm的远程开发或SSH解释器时PyCharm在远程机器上也会调用conda API远程机器上的.condarc和环境变量同样会影响结果。很多人觉得远程机器的conda配置没问题因为手动登录上去跑命令正常但PyCharm通过SSH连接时走的Shell环境可能不是登录Shell就不会加载~/.bashrc于是conda初始化路径就变了。如果你遇到的是远程解释器场景并且上面的方法都不生效我建议你检查PyCharm设置的远程解释器使用的默认Shell是什么。有些自动生成的SSH配置里Shell路径指向了/bin/sh而/bin/sh不会读取.bashrc里conda初始化代码结果conda在这个Shell里根本没有启动。解决办法是把Shell改成/bin/bash并勾选“login shell”之类的选项。另外一个潜在的坑如果你用的conda版本太老比如conda 4.x早期版本它对envs_dirs的初始化机制和现在新版不完全一致。旧版本的conda对环境目录的处理更粗糙碰到路径存在权限问题时并不会直接报envs_dirs未初始化而是会静默忽略。新版conda反而更严格地暴露了这类问题。不要因为“我这conda用了好几年没出过问题”就拒绝升级很多时候升级conda到当前稳定版这个报错自己就消失了。在Windows上还有一个容易被忽略的hackPyCharm里配置Conda时如果界面上Conda executable输入框一直加载不出来环境可以手动在输入框里敲入C:\ProgramData\Anaconda3\Scripts\conda.exe然后点击页面空白处让控件失焦等待几秒PyCharm就会重新触发环境检测。这个“失焦触发检测”的技巧我用了很多次成功率相当高原因可能是PyCharm的UI控件在文本改变后需要另外的事件来触发刷新。最后分享一点维护层面的心得。conda和PyCharm的组合是日常开发的高频标配但这个组合出问题时很多人第一反应是卸载重装。我个人强烈不建议这么做除非你没有任何重要环境。正确做法是先稳住conda的命令行能力再去处理PyCharm侧的配置。先命令行后GUI先配置后重装这个顺序能帮你省下至少两个小时的折腾时间。另外我建议养成一个习惯每次发生环境相关故障后都检查一下两个地方.condarc里的路径是否真实存在以及系统环境变量里是否有重复或者指向旧路径的CONDA条目。这两个地方是大量conda奇怪问题的源头。在实际的日常开发中这个报错修复完以后我还会顺手做一件小事用conda config --show envs_dirs确认一遍当前环境目录并在.condarc里把envs_dirs显式写成一个稳定的、有写权限的绝对路径。这样以后PyCharm无论怎么刷新环境列表都不会再撞见初始化失败的问题。毕竟稳定的开发环境就像一张干净的工作台你只需要把东西放在固定的位置剩下的事工具自然会帮你处理好。
返回列表