web-dev-qa-db-ja.com

与えられたconda環境でpythonスクリプトを実行する最良の方法

サブプロセスパッケージを使用して、別のpythonスクリプトexecuted.pyからpythonスクリプトtrigger.pyを実行します。executed.pytrigger.pyとは別のconda環境で実行する必要があります(executed_envtrigger_envと言います)。私の現在のtrigger.pyのコードは次のとおりです。

command = "python executed.py --option1 -dir /path/to/dir"
args = shlex.split(command)
my_subprocess = subprocess.Popen(args)

executed.pytrigger_env環境で実行されるため、エラーが返されます。

13
Robin

Condaの組み込みメソッドについていくつか調査を行ったところ、次のことがわかりました。 1つ目は回避策で、2つ目は最終的なソリューションの組み込みソリューションです(この投稿の執筆時点では利用できません)。

  1. conda-wrappers Guilherme Meloは、conda環境内でpython実行可能ファイルのラッパーを作成しました。IDEでpythonインタープリターとして設定した場合、PyCharmなど呼び出されたconda環境をアクティブにし、pythonインタプリタを呼び出します。「condaラッパーの作成」セクションをご覧ください: https:// pypi .org/project/exec-wrappers /

  2. conda run のconda githubページでの長い議論により、環境内でコマンドを実行するための標準的で高速な方法 により、新しいコマンドが実装されました(実際には、以前は利用可能でした):conda run

issue#7320 で説明されており、 conda-4.6 で2018年10月にリリースされる予定です!

4
Agile Bean

他の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を実行してみましょう。

  • Py27環境を作成しますconda create -n py27 python=2.7これはtrigger_envです。
  • Py35環境を作成しますconda create -n py35 python=3.5これはexecuted_envです。
  • 完全なpython py35へのパスを取得するには、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 py27python trigger.pyで実行してみましょう。

  • これは3.5.2 |Continuum Analytics, Inc. [...]を出力します(3.5は重要な部分です)。 executed_envで他のpython=を使用していることがわかります。
2
Paul