【问题标题】:How to activate a virtualenv using a makefile?如何使用 makefile 激活 virtualenv?
【发布时间】:2018-10-28 18:55:34
【问题描述】:

在我的 makefile 顶部我有这一行:

SHELL := /bin/sh

大多数命令都需要它。但是,我还想要一个 make 命令来激活我的虚拟环境,它位于不同的路径上。

这是我为它编写的代码:

activate:
    source ~/.envs/$(APP)/bin/activate; \

这样做的问题是,这只是打印出这里写的内容,并没有被执行。我读到它可能与只有 bash 知道源代码有关,但我不知道如何在 activate 命令中临时切换模式。

我将如何编写这个方法,以便它激活我的 virtualenv?

【问题讨论】:

    标签: makefile virtualenv environment activation virtual-environment


    【解决方案1】:

    它确实被执行了。

    Virtualenv 通过修改您当前进程的环境来工作(这就是您必须“获取”它的原因)。但是,一个进程不能修改另一个进程的环境。因此,为了运行你的配方,make 调用一个 shell 并将你的 virtualenv 命令传递给它,它可以工作,然后 shell 退出,你的 virtualenv 就消失了。

    简而言之,在生成文件中没有简单的方法可以做到这一点。最简单的做法是创建一个脚本,首先获取 virtualenv 然后运行 ​​make,然后运行它而不是运行 make。

    【讨论】:

      【解决方案2】:

      像这样创建一个名为“make-venv”的文件:

      #!/bin/bash
      source ./.venv/bin/activate
      $2
      

      然后将其添加到 Makefile 的第一行

      SHELL=./make-venv
      

      现在,make-venv 在每个命令运行之前激活 virtualenv。可能效率低下,但很实用。

      【讨论】:

        【解决方案3】:

        您可以使用set 来做到这一点,它允许您设置或取消设置外壳选项和位置参数的值:

        set -a && . venv/bin/activate && set +a

        【讨论】:

          猜你喜欢
          • 2016-02-23
          • 2017-07-28
          • 1970-01-01
          • 2019-09-08
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          相关资源
          最近更新 更多