如何使用 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