在windows上使用anaconda环境和cygwin

2024-07-01 07:02:34 发布

您现在位置:Python中文网/ 问答频道 /正文

试图通过Windows NT上的cygwin接口用anaconda设置环境,但失败了。

创建环境(conda create -n test_env)工作正常。但是activate test_env失败了。

我试着用:

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

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


Tags: pathtestenv环境windowscreateexportanaconda
3条回答

conda 4.4开始,cygwin中支持activate&deactivate命令,语法如下(链接的文档还提供了向PATH添加conda的最佳实践,值得查看):

conda activate <name-of-environment-to-activate>
conda deactivate

然而,有a bug阻止了这些操作的开箱即用,cygwin使用的bash脚本都有Windows行结尾(CRLF)。要解决这个问题,有两种选择:

  1. .bash_profile.bashrc中添加以下内容(如@patrickkelly's answer中的脚本所做的那样):

    if [[ "${OSTYPE}" == 'cygwin' ]]; then
        set -o igncr
        export SHELLOPTS
    fi
    
  2. 使用类似于^{}的工具将相关文件的行尾改为Unix样式(LF)。必须转换安装conda的目录中的以下文件,可能还有其他文件:

    • etc/profile.d/conda.sh
    • Scripts/activate
    • Scripts/deactivate


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

由于Cygwin模拟linux环境,我们需要使用“source activate test_env”而不是“activate test_env”。

经过一段时间的努力,我想我已经找到了一个合理可行的方法来将Anaconda的python(和相关的环境)集成到Cygwin中。假设Cygwin和Anaconda都独立工作,要从Cygwin访问所有的Anaconda工具,在.bash_profile中的以下设置似乎起到了作用。(我只包含了与集成相关的.bash_profile部分。。。希望我没有无意中错过什么。)

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

使用此设置,我可以使用cyg-condacyg-activate的方式与通常在Anaconda命令提示符处使用condaactivate的方式相同,同时使环境对我的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

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

相关问题 更多 >

    热门问题