在Makefile中激活virtualenv

在Makefile中激活virtualenv,makefile,Makefile,如何在Makefile中激活virtualenv 我试过: venv: @virtualenv venv active: @source venv/bin/activate active: @. venv/bin/activate activate: ( \ source path/to/virtualenv/activate; \ pip install -r requirements.txt; \ ) 我也尝试过:

如何在Makefile中激活virtualenv

我试过:

venv:
    @virtualenv venv

active:
    @source venv/bin/activate
active:
    @. venv/bin/activate
activate:
    ( \
       source path/to/virtualenv/activate; \
       pip install -r requirements.txt; \
    )
我也尝试过:

venv:
    @virtualenv venv

active:
    @source venv/bin/activate
active:
    @. venv/bin/activate
activate:
    ( \
       source path/to/virtualenv/activate; \
       pip install -r requirements.txt; \
    )

而且它不会激活virtualenv。

以下是操作方法:

venv:
    @virtualenv venv

active:
    @source venv/bin/activate
active:
    @. venv/bin/activate
activate:
    ( \
       source path/to/virtualenv/activate; \
       pip install -r requirements.txt; \
    )
可以使用()在Makefile中执行shell命令

例如

echoTarget: 
    (echo "I'm an echo")
只需确保在shell命令的每一行之前都放置一个制表符。 i、 e.您将需要一个标签(echo“我是echo”)

以下是激活virtualenv的方法:

venv:
    @virtualenv venv

active:
    @source venv/bin/activate
active:
    @. venv/bin/activate
activate:
    ( \
       source path/to/virtualenv/activate; \
       pip install -r requirements.txt; \
    )

Makefiles无法直接激活环境。这就是我的工作原理:

activate:
    bash -c "venv/bin/activate"
如果您遇到权限被拒绝错误,请使venv/bin/activate可执行:

chmod +x venv/bin/activate

UPD 3月14日至21日

virtualenv内部的
pip安装
还有一个变体:

# Makefile

all: install run

install: venv
    : # Activate venv and install smthing inside
    . venv/bin/activate && pip install -r requirements.txt
    : # Other commands here

venv:
    : # Create venv if it doesn't exist
    : # test -d venv || virtualenv -p python3 --no-site-packages venv
    test -d venv || python3 -m venv venv

run:
    : # Run your app here, e.g
    : # determine if we are in venv,
    : # see https://stackoverflow.com/q/1871549
    . venv/bin/activate && pip -V

    : # Or see @wizurd's answer to exec multiple commands
    . venv/bin/activate && (\
      python3 -c 'import sys; print(sys.prefix)'; \
      pip3 -V \
    )

clean:
    rm -rf venv
    find -iname "*.pyc" -delete
因此,您可以使用不同的“标准”方式运行
make

  • make
    -目标为默认值
    all
  • make venv
    -只需创建virtualenv
  • make install
    -生成venv并执行其他命令
  • make run
    -在venv内执行应用程序
  • makeclean
    -删除venv和python二进制文件
当执行配方以更新目标时,通过为配方的每一行调用新的子shell来执行它们。--

由于配方的每一行都在单独的子shell中执行,因此我们应该在配方的同一行中运行python代码

用于显示python环境当前源代码的简单python脚本(文件名:
whichpy.py
):

导入系统 打印(系统前缀) 运行python虚拟环境(
Make
recipes在
sh
而不是
bash
上运行,使用
激活虚拟环境是正确的语法):


上述两种配方都是可以接受的,我们可以自由使用反斜杠/换行符将一种配方分隔为多行。

/bin/sh:1:source:not found
这可能会安装给定环境的要求,但用户仍必须通过shell命令启动环境。这并不能解决问题
make
需要以当前shell进程的形式运行(如果我理解正确的话)。请尝试使用
。venvpath/bin/activate
代替
源代码
make
可能使用
sh
而不是
bash
source
是bash ism,而
是标准的POSIX方式,因此更具可移植性。这就是为什么它可能会有所不同。刚刚找到了一个SO答案,解释了如何使用
bash
Makefile
s我想他想问的是,如果一个do
make
我的shell将使用这个环境。您将在主机名的from中看到
(venv)
activate
应该是源代码,而不是执行代码。
source-venv/bin/activate
如何代替您的
bash-c..
行为您工作?通过此设置,如何在
run
中激活
venv
?@jonathan.scholbach,我更新了一个示例来回答您的问题