サブプロセスパッケージを使用して、別のpythonスクリプトexecuted.py
からpythonスクリプトtrigger.py
を実行します。executed.py
trigger.py
とは別のconda環境で実行する必要があります(executed_env
とtrigger_env
と言います)。私の現在のtrigger.py
のコードは次のとおりです。
command = "python executed.py --option1 -dir /path/to/dir"
args = shlex.split(command)
my_subprocess = subprocess.Popen(args)
executed.py
はtrigger_env
環境で実行されるため、エラーが返されます。
Condaの組み込みメソッドについていくつか調査を行ったところ、次のことがわかりました。 1つ目は回避策で、2つ目は最終的なソリューションの組み込みソリューションです(この投稿の執筆時点では利用できません)。
conda-wrappers Guilherme Meloは、conda環境内でpython実行可能ファイルのラッパーを作成しました。IDEでpythonインタープリターとして設定した場合、PyCharmなど呼び出されたconda環境をアクティブにし、pythonインタプリタを呼び出します。「condaラッパーの作成」セクションをご覧ください: https:// pypi .org/project/exec-wrappers /
conda run のconda githubページでの長い議論により、環境内でコマンドを実行するための標準的で高速な方法 により、新しいコマンドが実装されました(実際には、以前は利用可能でした):conda run
issue#7320 で説明されており、 conda-4.6 で2018年10月にリリースされる予定です!
他のpythonを使用する必要がある場合は、command
で他のpython 。
executed_env
(Linuxの場合はsource activate executed_env
)にアクセスして、which python
を実行してください。コマンドで使用するpythonになるHOME/.conda/envs/executed_env/bin/python
を返すと仮定します。つまり、command = "HOME/.conda/envs/executed_env/bin/python executed.py --option1 -dir /path/to/dir"
です。これは
たとえば、別のpythonバージョンでexecuted.py
を実行してみましょう。
conda create -n py27 python=2.7
これはtrigger_env
です。conda create -n py35 python=3.5
これはexecuted_env
です。source activate py35
を実行してからwhich python
を実行します(この説明では、EXECUTED_PYTHONを呼び出します)。source deactivate
を使用して非アクティブ化します。次に、executed.py
を作成します
import sys
print(sys.version)
次に、trigger.py
(引数が含まれていますが、何もしていません)
command = "EXECUTED_PYTHON executed.py --option1 -dir /path/to/dir"
args = shlex.split(command)
my_subprocess = subprocess.Popen(args)
では、trigger_env
-source activate py27
とpython trigger.py
で実行してみましょう。
3.5.2 |Continuum Analytics, Inc. [...]
を出力します(3.5は重要な部分です)。 executed_env
で他のpython=を使用していることがわかります。