conda激活环境的原理
创作时间:
作者:
@小白创作中心
conda激活环境的原理
引用
CSDN
1.
https://blog.csdn.net/qq_21076851/article/details/138606881
在使用conda管理Python环境时,你是否遇到过环境无法激活的问题?本文将深入探讨conda环境激活的原理,解释为什么需要运行
conda init,以及PyCharm为什么能成功激活环境。
引入问题
为什么我不用conda init
每次安装conda或者miniconda时,我都不会运行
conda init
命令。因为,这个命令会修改shell初始化过程,会powershell的autorun注册表,会修改.bathrc或者.zshrc,所以会让我感觉环境“不干净”。
环境无法激活
不使用
conda init
,可以指定conda命令的具体位置去运行命令,例如
~/miniconda3/bin/conda env list
~/miniconda3/bin/conda create --name temp python=3.10
许多命令都可以这样使用,单唯独
~/miniconda3/bin/conda activate
命令无法使用
➜ ~ ~/miniconda3/bin/conda activate temp
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run
$ conda init <SHELL_NAME>
Currently supported shells are:
- bash
- fish
- tcsh
- xonsh
- zsh
- powershell
See 'conda init --help' for more information and options.
IMPORTANT: You may need to close and restart your shell after running 'conda init'.
pycharm竟然可以激活
所以说pycharm打开terminal不是使用
conda activate
激活的
解决问题
activate 为什么需要先 init
找到了关于
conda activate
的官方文档,发现介绍
conda init
的一段
https://conda.io/projects/conda/en/latest/dev-guide/deep-dives/activation.html#conda-initialization
我简单总结下,shell里的conda命令主要作用是转发给python conda,因为activate|deactivate需要对当前shell回话进行导入导出变量,而python中只能修改调用的子shell的环境,所以不能代理activate|deactivate这两个命令。
cat ~/miniconda3/bin/conda
#!/Users/bestcondition/miniconda3/bin/python
# -*- coding: utf-8 -*-
import sys
# Before any more imports, leave cwd out of sys.path for internal 'conda shell.*' commands.
# see https://github.com/conda/conda/issues/6549
if len(sys.argv) > 1 and sys.argv[1].startswith('shell.') and sys.path and sys.path[0] == '':
# The standard first entry in sys.path is an empty string,
# and os.path.abspath('') expands to os.getcwd().
del sys.path[0]
if __name__ == '__main__':
from conda.cli import main
sys.exit(main())
激活原理
最底层的激活方式是,先生成激活脚本,在执行激活脚本
https://conda.io/projects/conda/en/latest/dev-guide/deep-dives/activation.html#conda-initialization
例如,生成zsh激活的脚本
~/miniconda3/bin/conda shell.zsh activate test
PS1='(test) '
export PATH='/Users/bestcondition/miniconda3/envs/test/bin:/Users/bestcondition/miniconda3/condabin:老path'
export CONDA_PREFIX='/Users/bestcondition/miniconda3/envs/test'
export CONDA_SHLVL='1'
export CONDA_DEFAULT_ENV='test'
export CONDA_PROMPT_MODIFIER='(test) '
export CONDA_EXE='/Users/bestcondition/miniconda3/bin/conda'
export _CE_M=''
export _CE_CONDA=''
export CONDA_PYTHON_EXE='/Users/bestcondition/miniconda3/bin/python'
执行生成的脚本就会激活环境,直接生成加激活就是
eval "$(~/miniconda3/bin/conda shell.bash activate test)"
pycharm 应该就是用这样的方式激活的,但最终确认还是看pycharm community源码。
热门推荐
中国白酒十二香型图鉴(2024收藏版)
支链氨基酸的作用与功效
尺神经炎是什么意思
中国四大名酒:历史传承与文化魅力
浙江衢州:从无到有打造“世界鱼子酱之都”
辟谷减肥大揭秘:正确方法与靠谱性探讨
LLM4Decompile技术揭秘:利用大型语言模型反编译二进制代码
手机护眼模式真的可以护眼吗?护眼的正确打开方式是......
快40岁还在连场三双,看看詹姆斯每天如何投资自己身体的
凌霄花花语的象征与寓意(探究凌霄花花语的内涵与意义)
28岁转行学嵌入式,是勇敢追梦还是盲目冒险?
摩托车大灯不亮怎么办?一文详解故障检测方法
为什么不推荐宝宝体检查骨密度?到底怎么判断缺不缺钙?
弹丸论破十四周年 视觉小说新时代的钥匙
辐射4生存指南:18个实用技巧助你轻松应对游戏挑战
《网络非“法外之地”:酷狗音乐起诉造谣者赔偿50万》
【趣味地理】中国茶叶地图:全国茶到底有多少种?追随茶的一路
罕见病和孤儿病:联合疗法可以治疗吗?
揭秘:古代文明中的神秘符号,隐藏着什么惊天秘密?
手机SIM卡更换不再难:详细步骤与注意事项解析
叙事驱动的心理恐怖游戏《缄默祸运》上线steam页面
21号线,能守住1字头的新盘,不多了
AI在眼科整形手术中的应用:从诊断到患者沟通的全面革新
中国人为什么开始长痘痘了?
北欧神话:诸神之战
【心理学家集合】——荣格
RPG游戏:奇幻旅程与角色成长,你准备好开启冒险了吗?
一言不合就开吃?3步告别“情绪性进食”
1200公里!累并幸福着——记者跟大货司机夫妇一起回家
不锈钢的焊接工艺有哪些常见方法和注意事项