如何使用 makefile 激活 virtualenv?

How to activate a virtualenv using a makefile?

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

SHELL := /bin/sh

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

这是我为它编写的代码:

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

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

我要如何编写这个方法才能激活我的 virtualenv?

确实执行了。

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

简而言之,没有简单的方法可以在 makefile 中执行此操作。最简单的做法是创建一个脚本,首先获取 virtualenv,然后 运行s make,然后 运行 而不是 运行ning make。

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

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

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

SHELL=./make-venv

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

您可以使用 set 来设置或取消设置 shell 选项和位置参数的值:

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