Python 在windows上使用带有cygwin的anaconda环境

Python 在windows上使用带有cygwin的anaconda环境,python,windows,cygwin,anaconda,Python,Windows,Cygwin,Anaconda,试图通过Windows NT上的cygwin界面使用anaconda设置环境,但失败 创建环境(conda create-n test_env)工作正常。但是激活测试环境失败 我试着用: export PATH=/cygdrive/c/users/nick/anaconda3/envs/test:$PATH 这修复了一些行为(哪个python指向正确的python)。但是如果我随后执行“conda install”命令,它将安装到根anaconda目录中,而不是安装到环境中。也许导出是bash

试图通过Windows NT上的cygwin界面使用anaconda设置环境,但失败

创建环境(
conda create-n test_env
)工作正常。但是
激活测试环境
失败

我试着用:

export PATH=/cygdrive/c/users/nick/anaconda3/envs/test:$PATH

这修复了一些行为(
哪个python
指向正确的python)。但是如果我随后执行“conda install”命令,它将安装到根anaconda目录中,而不是安装到环境中。也许导出是bash会话的本地,conda调用了不同版本的PATH?有没有办法使PATH的修改成为全局的?

由于Cygwin模拟linux环境,我们需要使用“源代码激活测试环境”而不是“激活测试环境”。

经过一段时间的努力,我认为我已经找到了一种合理可行的方法来集成Anaconda的python(以及相关环境)塞格温。假设Cygwin和Anaconda都独立工作,要从Cygwin访问所有Anaconda工具,下面在
.bash\u profile
中的设置似乎可以做到这一点。(我只包括了与集成相关的
.bash_profile
部分……希望我没有无意中遗漏一些内容。)

这个设置基本上做了三件事。首先,用户需要明确地将目录
$CONDA_BASE_DIR
设置为安装CONDA/anaconda/miniconda基本环境的位置。其次,
.bash\u profile
中有一个功能,可以使用shell变量
$conda\u DEFAULT\u ENV
跟踪当前的conda环境。最后,我们定义了一个别名
cyg-conda
和一个函数
cyg-activate
,用作标准
conda
activate
命令的替换命令。请注意,变量名
$CONDA_DEFAULT_ENV
是特殊的,由实际的
CONDA
命令在内部使用

使用此设置,我可以使用
cyg-conda
cyg-activate
,就像我通常在Anaconda命令提示符下使用
conda
activate
一样,同时使我的Cygwin bash shell可以使用环境

当然可以接受改进建议等

###############################################################################

#  Anaconda Environment Selection - Plese set CONDA_BASE_DIR to the directory
#  containing the base installation of anaconda/miniconda.

export CONDA_BASE_DIR=/cygdrive/c/Users/Patrick/Miniconda3

#  Proxy Servers & Network Setup (if needed)

export HTTP_PROXY=
export HTTPS_PROXY=

#  IMPORTANT - Ignore carriage returns when using a Cygwin environment.

export SHELLOPTS
set -o igncr

###############################################################################

#  Manage conda environments for Python.  We check the environment variable
#  $CONDA_DEFAULT_ENV to see which environment is desired.  The default (root)
#  environment will be chosen if nothing is specified.  Note that this variable
#  will be explicitly managed by the cyg-activate ( ) function we have defined
#  below, specifically for the purpose of changing environments.  The root
#  environment is also handled slightly different from the others when it comes
#  to setting the CONDA_DEFAULT_ENV variable.

if [ ${CONDA_DEFAULT_ENV} ] && [ ${CONDA_DEFAULT_ENV} != 'root' ] 
then
    #  SELECT ONE OF THE NON-DEFAULT ENVIRONMENTS
    export CONDA_PREFIX=${CONDA_BASE_DIR}/envs/${CONDA_DEFAULT_ENV}
else
    #  SELECT THE DEFAULT ENVIRONMENT (and set CONDA_DEFAULT_ENV full path)
    export CONDA_DEFAULT_ENV=root
    export CONDA_PREFIX=${CONDA_BASE_DIR}
fi

###############################################################################

#  Define cyg-conda and cyg-activate to facilitate management of conda.

alias cyg-conda=${CONDA_BASE_DIR}/Scripts/conda.exe

cyg-activate() {
    export CONDA_DEFAULT_ENV=$1
    source ~/.bash_profile
    cyg-conda info --envs
}

###############################################################################

#  PATH - ALl of the anaconda/miniconda path entries appear first.

PATH=
PATH=$PATH:$CONDA_PREFIX
PATH=$PATH:$CONDA_PREFIX/Library/mingw-w64/bin
PATH=$PATH:$CONDA_PREFIX/Library/usr/bin
PATH=$PATH:$CONDA_PREFIX/Library/bin
PATH=$PATH:$CONDA_PREFIX/Scripts
PATH=$PATH:$HOME/scripts
PATH=$PATH:$HOME/local/bin
PATH=$PATH:/usr/local/bin
PATH=$PATH:/usr/bin

export PATH

###############################################################################
截至目前,cygwin支持以下语法的激活和停用命令(链接文档还提供了将conda添加到
路径
的最佳实践,值得查看):

conda激活
康达酒店
然而,有一个因素阻止了这些操作的开箱即cygwin使用的bash脚本都有Windows行结尾(CRLF)。要解决此问题,有两个选项:

  • 将以下内容添加到您的
    .bash\u配置文件
    .bashrc
    (如@patrickkelly答案中的脚本所示):

    if[[“${OSTYPE}”=='cygwin']];然后
    设置-o点火开关
    出口贝壳
    fi
    
  • 使用类似的工具将相关文件的行尾更改为Unix样式(LF)。必须转换位于conda安装目录中的以下文件,可能还有其他文件:

    • etc/profile.d/conda.sh
    • 脚本/激活
    • 脚本/停用

    更新:当康达更新自身时,上述文件至少在某些时候被覆盖,恢复CRLF行结尾,因此在这些情况下必须重复将其转换为LF的过程


  • 使用激活的环境conda和cygwin的一种方法是:

    • 打开cmd:Win+R并写入cmd
    • 激活康达:康达激活环境
    • 打开cygwin:cygwin(对于此cygwin,必须将其添加到路径)

    不幸的是,它抛出了自己的错误。在anaconda论坛上,答案似乎是“等待4.1或使用开发版本”--它在那里被修复了具体地说,我得到了
    bash:/usr/bin/conda:没有设置这样的文件或目录
    ——如果我正在运行ZSH,则需要输入igncr?要使此集成工作,需要记住一些事情。(i) 请直接从安装程序安装Anaconda,而不是像Chocolate这样从软件包管理器安装Anaconda,因为这种方法必须在Anaconda根目录下才能工作。(ii)为了让anaconda python在cygwin命令行中工作,必须使用
    python-i
    。只需使用
    python
    即可冻结屏幕。为了让事情更清楚,您需要
    source
    此脚本(手动或在.bashrc中),然后运行
    cyg activate
    然后
    source activate
    您的环境项1。这个答案解决了我所有的Anaconda/Cygwin问题。似乎有许多以dos行结尾的脚本。即使在我执行“conda init bash”时,我的.bash_配置文件也会在添加“eval”命令后自动转换为dos,从而中断bash启动。请参见最近的miniconda(4.7.10)对我有效。以前我有过不少Cygwin的烦恼,但值得注意的是,仅仅设置
    igncr
    似乎就解决了所有问题。我认为自上次尝试以来,其他一些小错误已经修复。当使用建议#1时,
    conda activate
    不会激活环境,但
    source activate
    会激活