web-dev-qa-db-ja.com

Windowsのcygwinでanaconda環境を使用する

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」コマンドを実行すると、環境ではなくルートアナコンダディレクトリにインストールされます。おそらく、エクスポートはbashセッションに対してローカルであり、condaは異なるバージョンのPATHを呼び出しますか? PATHの変更をグローバルにする方法はありますか?

13
nick_eu

かなり長い間問題に取り組んだ後、Anacondaのpython(および関連する環境)をCygwinに統合するための合理的で実用的な方法を達成したと思います。CygwinとAnacondaの両方が動作していると仮定して独立して、CygwinからすべてのAnacondaツールにアクセスするには、.bash_profileの次の設定でうまくいくようです(統合に関連する.bash_profileの部分のみを含めています...誤って何かを見逃さないでください。)

このセットアップは基本的に3つのことを行います。まず、ユーザーはディレクトリ$CONDA_BASE_DIRをconda/anaconda/minicondaの基本環境がインストールされた場所に明示的に設定する必要があります。次に、.bash_profileには、シェル変数$CONDA_DEFAULT_ENVを使用して現在のconda環境を追跡する機能があります。最後に、エイリアスcyg-condaと関数cyg-activateを定義して、標準のcondaおよびactivateコマンドの置換コマンドとして使用します。 変数名$CONDA_DEFAULT_ENVは特別であり、実際のcondaコマンドによって内部的に使用されることに注意してください。

この設定を使用すると、Anacondaコマンドプロンプトで通常condaactivateを使用するのと同じように、cyg-condacyg-activateを使用できます。 Cygwin bashシェルで使用できる環境。

確かに改善などの提案を受け入れる.

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

#  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

###############################################################################
17
Patrick Kelly

conda 4.4 の時点で、アクティブ化および非アクティブ化コマンドはcygwinで以下の構文でサポートされています(リンクされたドキュメントは、condaをPATHに追加するためのベストプラクティスも提供しています。チェックする価値があります):

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

しかし バグ があるため、これらはそのままでは機能しません。つまり、cygwinがすべてを使用するbashスクリプトには、Windowsの行末(CRLF)があります。これを解決するには、いくつかのオプションがあります。

  1. 以下を.bash_profileまたは.bashrcに追加します(@patrickkellyの回答のスクリプトで行われているように)。

    if [[ "${OSTYPE}" == 'cygwin' ]]; then
        set -o igncr
        export SHELLOPTS
    fi
    
  2. dos2unix のようなツールを使用して、関連ファイルの行末をUnixスタイル(LF)に変更します。 condaがインストールされたディレクトリにある以下のファイルは変換する必要があり、他のファイルがある可能性があります。

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


    update:condaが自身を更新すると、上記のファイルは少なくともしばらくは上書きされ、CRLF行末が復元されるため、それらをLFに変換することは、これらの状況下で繰り返す必要があります。

5
Grant Humphries

CygwinはLinux環境をエミュレートするため、「activate test_env」の代わりに「source activate test_env」を使用する必要があります。

2
siva008