尝试通过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?有一种方法可以修改PATH全局吗?
答案 0 :(得分:16)
在与问题搏斗了很长一段时间之后,我认为我已经实现了将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
,用作标准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
###############################################################################
答案 1 :(得分:2)
由于Cygwin模拟linux环境,我们需要使用“source activate test_env”而不是“activate test_env”。
答案 2 :(得分:2)
自conda 4.4起,cygwin现在支持使用以下语法的activate&deactivate命令(链接的文档还提供了将conda添加到PATH
的最佳做法,值得一试):>
conda activate my_env
conda deactivate
但是,有a bug阻止了它们开箱即用,因为cygwin所使用的bash脚本均具有Windows行尾(CRLF)。要解决此问题,有两种选择:
将以下内容添加到您的.bash_profile
或.bashrc
中(就像@patrickkelly的答案中的脚本中所做的那样):
if [[ "${OSTYPE}" == 'cygwin' ]]; then
set -o igncr
export SHELLOPTS
fi
使用dos2unix
之类的工具将相关文件的行尾更改为Unix样式(LF)。位于conda安装目录中的以下文件必须进行转换,并且可能还有其他文件:
etc/profile.d/conda.sh
Scripts/activate
Scripts/deactivate
更新:当conda自身更新时,至少在某些时候会覆盖上述文件,因此要恢复CRLF行尾,因此必须将它们转换为LF的过程在这种情况下会重复。
答案 3 :(得分:1)
使用 env conda 激活和 cygwin 的一种方法是: