VSCode中conda activate命令执行失败的排查与解决
在VSCode终端执行conda activate <虚拟环境名>时偶尔会抛出如下错误,但系统原生终端执行完全正常:
Traceback (most recent call last): File "/Users/umbertofontanazza/opt/anaconda3/lib/python3.9/site-packages/conda/exception_handler.py", line 17, in __call__ return func(*args, **kwargs) File "/Users/umbertofontanazza/opt/anaconda3/lib/python3.9/site-packages/conda/cli/main.py", line 105, in main_sourced print(activator.execute(), end="") File "/Users/umbertofontanazza/opt/anaconda3/lib/python3.9/site-packages/conda/activate.py", line 199, in execute return getattr(self, self.command)() File "/Users/umbertofontanazza/opt/anaconda3/lib/python3.9/site-packages/conda/activate.py", line 165, in activate builder_result = self.build_activate(self.env_name_or_prefix) File "/Users/umbertofontanazza/opt/anaconda3/lib/python3.9/site-packages/conda/activate.py", line 343, in build_activate return self._build_activate_stack(env_name_or_prefix, False) File "/Users/umbertofontanazza/opt/anaconda3/lib/python3.9/site-packages/conda/activate.py", line 433, in _build_activate_stack deactivate_scripts = self._get_deactivate_scripts(old_conda_prefix) File "/Users/umbertofontanazza/opt/anaconda3/lib/python3.9/site-packages/conda/activate.py", line 765, in _get_deactivate_scripts for entry in os.scandir(join(prefix, "etc", "conda", "deactivate.d")) File "/Users/umbertofontanazza/opt/anaconda3/lib/python3.9/posixpath.py", line 76, in join a = os.fspath(a) TypeError: expected str, bytes or os.PathLike object, not NoneType
$ /Users/umbertofontanazza/opt/anaconda3/bin/conda shell.posix activate base
environment variables:
CIO_TEST=
CONDA_EXE=/Users/umbertofontanazza/opt/anaconda3/bin/conda
CONDA_PREFIX_3=/Users/umbertofontanazza/opt/anaconda3
CONDA_PYTHON_EXE=/Users/umbertofontanazza/opt/anaconda3/bin/python
CONDA_ROOT=/Users/umbertofontanazza/opt/anaconda3
CONDA_SHLVL=4
CURL_CA_BUNDLE=
LD_PRELOAD=
MANPATH=/usr/share/man:/usr/local/share/man:/Applications/Wireshark.app/Conten
ts/Resources/share/man:
PATH=/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/
sbin:/Applications/Wireshark.app/Contents/MacOS:/var/run/com.apple.sec
urity.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple
.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.s
ecurity.cryptexd/codex.system/bootstrap/usr/appleinternal/bin
REQUESTS_CA_BUNDLE=
SSL_CERT_FILE=
active environment : None shell level : 4 user config file : /Users/umbertofontanazza/.condarc
populated config files : /Users/umbertofontanazza/.condarc
conda version : 23.9.0
conda-build version : 3.27.0
python version : 3.9.18.final.0
virtual packages : __archspec=1=x86_64
__osx=10.16=0
__unix=0=0
base environment : /Users/umbertofontanazza/opt/anaconda3 (writable)
conda av data dir : /Users/umbertofontanazza/opt/anaconda3/etc/conda
conda av metadata url : None
channel URLs : https://repo.anaconda.com/pkgs/main/osx-64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/r/osx-64
https://repo.anaconda.com/pkgs/r/noarch
package cache : /Users/umbertofontanazza/opt/anaconda3/pkgs
/Users/umbertofontanazza/.conda/pkgs
envs directories : /Users/umbertofontanazza/opt/anaconda3/envs
/Users/umbertofontanazza/.conda/envs
platform : osx-64
user-agent : conda/23.9.0 requests/2.31.0 CPython/3.9.18 Darwin/22.5.0 OSX/10.16
UID:GID : 501:20
netrc file : None
offline mode : False
An unexpected error has occurred. Conda has prepared the above report.
If you suspect this error is being caused by a malfunctioning plugin,
consider using the --no-plugins option to turn off plugins.
Example: conda --no-plugins install
Alternatively, you can set the CONDA_NO_PLUGINS environment variable on
the command line to run the command without plugins enabled.
Example: CONDA_NO_PLUGINS=true conda install
观察到VSCode会记住每个目录的激活环境,有时Shell提示符显示同时激活了两个环境,推测VSCode打开终端时执行了额外命令,以下是查看命令及解决问题的方法: --- ## 一、查看VSCode终端启动命令 - 打开VSCode设置,搜索`terminal.integrated.shellArgs`(对应使用的Shell类型,比如bash/zsh),查看是否配置了自定义启动命令。 - 查看Python插件自动注入的命令: 1. 打开命令面板(`Cmd+Shift+P`/`Ctrl+Shift+P`),输入`Developer: Set Log Level...`,选择`Trace`。 2. 重新打开终端,打开输出面板(`View > Output`),选择`Terminal`选项卡,即可看到终端启动时执行的所有命令。 --- ## 二、修复Conda激活错误 ### 1. 关闭VSCode自动环境激活 VSCode的Python插件默认自动激活关联环境,易引发变量冲突: - 打开VSCode设置,搜索`python.terminal.activateEnvironment`,将其设置为`false`。 - 重启VSCode终端,手动执行`conda activate <虚拟环境名>`测试。 ### 2. 重置Conda Shell层级 错误日志显示`CONDA_SHLVL=4`,说明层级异常,执行以下命令重置: ```bash conda deactivate && conda deactivate && conda deactivate && conda deactivate
之后再尝试激活目标环境。
3. 清理或更新Conda
- 备份
~/.condarc文件后删除,重置Conda配置,再测试激活命令。 - 更新Conda到最新版本:
conda update -n base conda
4. 禁用Conda插件测试
按错误提示临时禁用插件,验证是否为插件问题:
CONDA_NO_PLUGINS=true conda activate <虚拟环境名>
若能正常激活,可逐步排查并卸载有问题的插件。
内容的提问来源于stack exchange,提问作者Umberto Fontanazza

