子プロセスはPythonスクリプトでconda環境を有効にします。

子プロセスはPythonスクリプトでconda環境を有効にします。

私はcondaを使用して別の変数にいくつかのモジュールをインストールするPythonプログラムを作業しています。したがって、スクリプトを実行する前に、Unixシェルで次のコマンドを呼び出して環境をインポートします。

conda activate my-rdkit-env

私のPythonスクリプトから呼び出すことはできますか?以下のように試しましたが、成功しませんでした。

import subprocess
subprocess.run('conda init bash', shell=True)
#subprocess.run('conda activate my-rdkit-env', shell=True)

答え1

~からこの回答環境で直接スクリプトを実行できる必要があります。これにより、作業環境で別のコードを実行している間に環境を有効または無効にする必要がなくなります。

process = subprocess.Popen(
    "conda run -n ${CONDA_ENV_NAME} python script.py".split(), , stdout=subprocess.PIPE
)
output, error = process.communicate()

答え2

~からhttps://github.com/conda/conda/issues/9296

Conda init は conda をシェル関数として登録します。イネーブルにするには、このビットがシェルを初期化する必要があります。次のようなことができます

. $CONDA_PREFIX/etc/profile.d/conda.sh && conda activate test4 && conda env list

たとえば、

import subprocess
cmd = '. $CONDA_PREFIX/etc/profile.d/conda.sh && conda activate my-rdkit-env' 
subprocess.call(cmd, shell=True, executable='/bin/bash')

メモ:

このコードを実行すると、すでに別のconda環境にある場合は、$CONDA_PREFIXその環境のプレフィックスが提供されます。基本バージョンを入手するには、端末を開き、$CONDA_PREFIX。次に、$CONDA_PREFIXプロンプトで提供される内容(通常は同じ内容/home/user/anaconda3)に置き換えます。

関連情報