如何使用 makefile 激活 virtualenv?

Posted

技术标签:

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

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

SHELL := /bin/sh

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

这是我为它编写的代码:

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

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何使用 makefile 激活 virtualenv?的主要内容,如果未能解决你的问题,请参考以下文章

[Django] 创建python virtual environment 虚拟环境 并激活 | 安装配置Django

Makefile 中的隐式规则

如何修改虚拟机中(Microsoft Virtual PC或VMware)的bios

Makefile不能使用`conda activate`

从 Windows 的 git bash 激活 venv

华硕电脑搜不到无线,连不了无线,microsoft wi-fi direct virtual adapter设备无