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

Best way to execute a python script in a given conda environment

我想使用 subprocess 包从另一个 python 脚本 trigger.py 执行一个 python 脚本 executed.pyexecuted.py 在与 trigger.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)

它 returns 一个错误,因为 executed.pytrigger_env 环境中是 运行。

如果您只需要使用另一个 python,那么我相信您只需要在 command 中使用另一个 python 的完整路径。

尝试进入您的 executed_env(即 source activate executed_env 如果 Linux)并执行 which python。让我们假设 returns HOME/.conda/envs/executed_env/bin/python 现在变成您在命令中使用的 python —— 即 command = "HOME/.conda/envs/executed_env/bin/python executed.py --option1 -dir /path/to/dir"。这个

例如,我们 运行 executed.py 在不同的 python 版本中。

  • 创建你的py27环境conda create -n py27 python=2.7这是trigger_env
  • 创建你的py35环境conda create -n py35 python=3.5这是executed_env
  • 通过 运行ning source activate py35 然后 which python 获取 py35 的完整 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

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

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

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

希望在 2018 年 10 月issue #7320 and will be released in conda-4.6中描述!

在 windows 环境中使用 conda,我只是复制了 conda 从不同环境启动不同 jupyter 笔记本的方式。所有快捷方式都使用“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

之前我已经按照 Paul 的指示成功进行了,但是遇到了一个不充分的情况。完整路径中的 python 无法找到一些库,使用 cwp.py 它可以工作。