Conda in Windows under MSYS2 and Zsh 的问题解决

在Window11上使用git bash 安装zsh,并配置p10k主题,主要问题就是prompt中无法显示conda env;conda activate/deactivate 命令不能正常使用;

总结其实就是一个核心问题,\r,\n,\r\n的区别

Errors likes these:

(eval):11: parse error near ^M

\r被解析成了^M,导致路径错误,如下:/c/Users/joaom/Miniconda3/Scripts/conda.exe^M

~
❯ conda activate base ~ [base]
❯ conda deactivate __conda_activate:13: no such file or directory: /c/Users/joaom/Miniconda3/Scripts/conda.exe^M

或者,conda init 无效:

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
If using 'conda activate' from a batch script, change your
invocation to 'CALL conda.bat activate'. To initialize your shell, run $ conda init <SHELL_NAME> Currently supported shells are:
- bash
- cmd.exe
- 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'.

或者一些其他的报错,是关于window 和 unix编码的问题。

参考;

Conda in Windows under MSYS2 and Zsh line ending problems · Issue #9922 · conda/conda (github.com)

Conda activate UnicodeEncodeError if non-ascii characters present in bash prompt · Issue #7876 · conda/conda (github.com)

尝试过程:

  1. # >>> conda initialize >>>
    # !! Contents within this block are managed by 'conda init' !!
    #if [ -f '/d/Anaconda3/Scripts/conda.exe' ]; then
    # eval "$('/d/Anaconda3/Scripts/conda.exe' 'shell.zsh' 'hook')"
    #fi # temp solution
    . /d/Anaconda3/etc/profile.d/conda.sh
    # <<< conda initialize <<<
  2. 使用大佬分享的conda.sh文件;

    export CONDA_EXE=$(echo '/cygdrive/c/Users/karp/anaconda3/Scripts/conda.exe' | tr -d '\r')
    export _CE_M=''
    export _CE_CONDA=''
    export CONDA_PYTHON_EXE='C:\Users\karp\anaconda3\python.exe' # Copyright (C) 2012 Anaconda, Inc
    # SPDX-License-Identifier: BSD-3-Clause __add_sys_prefix_to_path() {
    # In dev-mode CONDA_EXE is python.exe and on Windows
    # it is in a different relative location to condabin.
    if [ -n "${_CE_CONDA}" ] && [ -n "${WINDIR+x}" ]; then
    SYSP=$(\dirname "${CONDA_EXE}")
    SYSP=$(echo ${SYSP} | tr -d '\r')
    else
    SYSP=$(\dirname "${CONDA_EXE}")
    SYSP=$(\dirname "${SYSP}")
    SYSP=$(echo ${SYSP} | tr -d '\r')
    fi if [ -n "${WINDIR+x}" ]; then
    PATH="${SYSP}/bin:${PATH}"
    PATH="${SYSP}/Scripts:${PATH}"
    PATH="${SYSP}/Library/bin:${PATH}"
    PATH="${SYSP}/Library/usr/bin:${PATH}"
    PATH="${SYSP}/Library/mingw-w64/bin:${PATH}"
    PATH="${SYSP}:${PATH}"
    PATH=$(echo ${PATH} | tr -d '\r')
    else
    PATH="${SYSP}/bin:${PATH}"
    PATH=$(echo ${PATH} | tr -d '\r')
    fi
    \export PATH
    } __conda_exe() (
    __add_sys_prefix_to_path
    $(echo "$CONDA_EXE" | tr -d '\r') $_CE_M $_CE_CONDA $(echo "$@" | tr -d '\r')
    ) __conda_hashr() {
    if [ -n "${ZSH_VERSION:+x}" ]; then
    \rehash
    elif [ -n "${POSH_VERSION:+x}" ]; then
    : # pass
    else
    \hash -r
    fi
    } __conda_activate() {
    if [ -n "${CONDA_PS1_BACKUP:+x}" ]; then
    # Handle transition from shell activated with conda <= 4.3 to a subsequent activation
    # after conda updated to >= 4.4. See issue #6173.
    PS1="$CONDA_PS1_BACKUP"
    PS1=$(echo ${PS1} | tr -d '\r')
    \unset CONDA_PS1_BACKUP
    fi
    \local ask_conda
    ask_conda="$(PS1="${PS1:-}" __conda_exe shell.posix "$@")" || \return
    ask_conda=$(echo ${ask_conda} | tr -d '\r')
    \eval "$ask_conda"
    __conda_hashr
    } __conda_reactivate() {
    \local ask_conda
    ask_conda="$(PS1="${PS1:-}" __conda_exe shell.posix reactivate)" || \return
    ask_conda=$(echo ${ask_conda} | tr -d '\r')
    \eval "$ask_conda"
    __conda_hashr
    } conda() {
    \local cmd="${1-__missing__}"
    case "$cmd" in
    activate|deactivate)
    __conda_activate $(echo "$@" | tr -d '\r')
    ;;
    install|update|upgrade|remove|uninstall)
    __conda_exe $(echo "$@" | tr -d '\r') || \return
    __conda_reactivate
    ;;
    *)
    __conda_exe $(echo "$@" | tr -d '\r')
    ;;
    esac
    } if [ -z "${CONDA_SHLVL+x}" ]; then
    \export CONDA_SHLVL=0
    # In dev-mode CONDA_EXE is python.exe and on Windows
    # it is in a different relative location to condabin.
    if [ -n "${_CE_CONDA:+x}" ] && [ -n "${WINDIR+x}" ]; then
    PATH="$(\dirname "$CONDA_EXE")/condabin${PATH:+":${PATH}"}"
    else
    PATH="$(\dirname "$(\dirname "$CONDA_EXE")")/condabin${PATH:+":${PATH}"}"
    fi
    \export PATH # We're not allowing PS1 to be unbound. It must at least be set.
    # However, we're not exporting it, which can cause problems when starting a second shell
    # via a first shell (i.e. starting zsh from bash).
    if [ -z "${PS1+x}" ]; then
    PS1=
    fi
    fi

目前仍然存在的问题是:

虽然conda activate/deactivate 命令不报错了,但是非base的虚拟环境并未完全激活;

如下,base env 正常,但其他的env 就不行;(注意*,表示当前激活环境)

❯ conda activate base
❯ conda env list
# conda environments:
#
base * D:\Anaconda3
d2l D:\Anaconda3\envs\d2l

非base env 的情况:(并未激活;)

❯ conda activate d2l
❯ conda env list
# conda environments:
#
base D:\Anaconda3
d2l D:\Anaconda3\envs\d2l

后来又找到:https://github.com/conda/conda/issues/9922#issuecomment-1361695031

完美解决。

❯ conda activate d2l
❯ conda env list
# conda environments:
#
base D:\Anaconda3
d2l * D:\Anaconda3\envs\d2l

Conda in Windows under MSYS2 and Zsh 的问题解决的更多相关文章

  1. Windows 下 MSYS2 环境配置和 MinGW-w64 C++ 环境配置

    Windows 下 MSYS2 环境配置和 MinGW-w64 C++ 环境配置 1.简介 本文主要是 Windows 下 MSYS2 环境配置和 MinGW-w64 C++编译环境配置方法 2.下载 ...

  2. 一文搞定 Windows Terminal 设置与 zsh 安装 (非WSL)

    为 Windows Terminal 添加标签页 添加 Anaconda 标签页 在settings.json文件中的list列表中添加设置项: { // Make changes here to t ...

  3. windows 配置msys2环境

    msys2是一个在windows下模拟类unix的环境,之所以叫环境,是用为他提供了部分unix shell类似的功能,这个环境使你像在unix上使用shell一样.看到msys2你可能想到是不是还有 ...

  4. windows安装msys2 mingw64

    msys2包含mingw32和mingw64 步骤1 首选安装msys64 链接:https://pan.baidu.com/s/1l9Zfm4TE1Gg3c7tkaH6KeQ 安装到指定目录 步骤2 ...

  5. mysql学习-windows下绿色版mysql安装问题解决办法

    1.下载绿色版mysql 从该地址http://dev.mysql.com/downloads/mysql/ 中选择windows的版本,选择下载. 2.将下载的压缩包解压. 3.将根目录下的my-d ...

  6. Linux时间与Windows差8个时区的问题解决方法

    我的Debian7.1的时间与windows上的时间不一致,正好差8个时区,原因是Debian将机器的物理时间理解为UTC时间了.去网上找了好多文章,基本上都是说要改/etc/default/rcS, ...

  7. Windows Live Writer介绍及相关问题解决

    今天本来想说更新一篇我的文章,更新的过程中添加了很多的内容,里面的图片太多了,导致我浏览器占用的内存不断增大,浏览器变得很卡,最后过了好久我终于更新完文章打算保存的时候居然卡住,然后所有我更新的文字和 ...

  8. Windows 2003 Server 标准版启动问题解决(资源转贴)

    维护的系统之一是部署在windows2003 Server标准版的服务器上,可能是由于某个应用问题,导致远程重启失败,害得我在机房呆了一早晨,可算是够折腾的.最后按照官方文档解决,刚放文档地址是:ht ...

  9. Windows 下的文件被占用问题解决

    windows下,经常容易出现文件被其他程序占用的现象,令人十分头疼.更头疼的是,还看不到被谁占用. 实际上是有办法看到占用的进程的. 话不多说,以Win10为例: 1.打开资源监视器 a.直接程序栏 ...

  10. c++ windows与linux通信中文乱码问题解决方法

    在linux中默认编码方式是UTF-8,在Windows下默认编码方式时GB2312.因此,在Windows和Linux进行通信的时候,如果没有进行转码则会出现乱码问题.因此,需要进行UTF-8和GB ...

随机推荐

  1. 用bcftools将多个vcf文件合并成一个vcf文件 或将多个vcf和合并成的vcf文件拆分成单个样本的vcf文件

    1. 软件的安装 a. bcftools 的安装 b. bgzip的安装: https://blog.csdn.net/weixin_30471065/article/details/95108525 ...

  2. bootstrap栅格系统,排版,代码,表格表单

    一.栅格系统 栅格系统用于通过一系列的行(row)与列(column)的组合来创建页面布局. 实例: <!DOCTYPE html> <html lang="zh-CN&q ...

  3. jsp第4个作业(1)

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  4. sql年、季度、月的第一天

    SELECT dateadd(yy,datediff(yy,0,getdate()),0) select dateadd(qq,datediff(qq,0,getdate()),0) select d ...

  5. 一次CentOS 出现“Too many open files"错误的解决

    一.原因分析 出现本问题,应该是打开文件最多数量不足,默认是1024个,在生产环境中经常出现该问题. 使用ulimit -a 查看打开文件数量限制 二.解决方案A(临时有效) 1.如果是非root用户 ...

  6. density plot

    FIN=read.table("/Users/zhongyuantian/macshare/workSpace2021/1.TFY/1.3.TFY20201215/1.3.1.TFY1C_T ...

  7. 在linux下创建KVM虚拟机

    Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调度器进行管理,所 ...

  8. Sqoop导入MySQL表中数据到Hive出现错误: ERROR hive.HiveConfig: Make sure HIVE_CONF_DIR is set correctly.ERROR tool.ImportTool: Import failed:

    1.问题描述: (1)问题示例: [Hadoop@master TestDir]$ sqoop import --connect jdbc:mysql://master:3306/source?use ...

  9. 大数据组件对应Ranger插件的选择

    在都是开源组件的前提下,一般需要我们多关注到组件和插件的版本和类型选择. 参考 https://zhuanlan.zhihu.com/p/370263573 https://www.bookstack ...

  10. python-实现栈结构

    # encoding=utf-8 class Stack(object): """栈""" def __init__(self): &quo ...