在给定的conda环境中执行python脚本的最佳方法

时间:2017-02-03 13:12:47

标签: python subprocess environment conda

我想使用子进程包从另一个python脚本executed.py执行python脚本trigger.pyexecuted.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后,它会返回错误。

3 个答案:

答案 0 :(得分:4)

我对任何conda内置方法进行了研究,发现了以下内容。第一个是解决方法,第二个是最终解决方案内置解决方案(在撰写本文时不可用)。

  1. conda包装器 Guilherme Melo在conda环境中为python可执行文件创建了包装。如果您在IDE中将其设置为python解释器,例如PyCharm,它将激活从其调用的conda环境,然后调用python解释器。 在“创建conda包装器”部分下查看此处: https://pypi.org/project/exec-wrappers/

  2. conda运行 在a standard and fast way to execute a command inside an environment的conda github页面上的长时间讨论导致了新命令的实现(实际上是重新调用,因为它以前可用): conda run

它在issue #7320中有描述,有望在2018年10月在conda-4.6中发布!

答案 1 :(得分:2)

如果你只需要使用另一个python,那么我相信你只需要使用nullptr中其他python的完整路径。

尝试进入command(例如Linux executed_env)并执行source activate executed_env。让我们假设现在返回which python成为您在命令中使用的python - 即HOME/.conda/envs/executed_env/bin/python。这个

例如,让我们在另一个python版本中运行command = "HOME/.conda/envs/executed_env/bin/python executed.py --option1 -dir /path/to/dir"

  • 创建您的py27环境executed.py这是conda create -n py27 python=2.7
  • 创建py35环境trigger_env这是conda create -n py35 python=3.5
  • 通过运行executed_env然后source activate py35获取py35的完整python路径(让我们在此说明中调用EXECUTED_PYTHON)。通过which 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_envsource activate py27中运行它。

  • 打印python trigger.py(3.5是重要部分)。您可以看到它正在使用3.5.2 |Continuum Analytics, Inc. [...]中的其他python。

答案 2 :(得分:1)

在 windows 环境中使用 conda,我只是复制了 conda 的方式,用于从不同的环境启动不同的 jupyter notebook。所有快捷方式都使用“C:\ProgramData\Anaconda3\python.exe”调用“C:\ProgramData\Anaconda3\cwp.py”脚本,然后通过附加参数您可以选择要执行的环境和文件。

就我而言,环境名称 = AutomateXXReporting,要执行的文件 = C:\Users\ismael.serrano\Documents\GIT\xxx\notebooks\exports\get_JIRA_user_streams.py

C:\ProgramData\Anaconda3\python.exe C:\ProgramData\Anaconda3\cwp.py C:\Users\ismael.serrano\.conda\envs\AutomateXXReporting C:\Users\ismael.serrano\.conda\envs\AutomateXXReporting\python.exe C:\Users\ismael.serrano\Documents\GIT\xxx\notebooks\exports\get_JIRA_user_streams.py

以前我按照保罗的指示成功地进行了,但遇到了一个还不够的情况。完整路径中的python无法找到一些库,使用cwp.py可以。