无法从Makefile激活python venv环境

问题描述 投票:0回答:1

我正在尝试使用Makefile命令激活我的虚拟环境,但是当我在下面运行时遇到错误。

Command

make env

错误

Makefile:20: warning: overriding commands for target `make'
Makefile:17: warning: ignoring old commands for target `make'
source ../env/bin/activate
make: source: No such file or directory
make: *** [env] Error 1

Makefile

...
env:
    source ../env/bin/activate
  • 环境在包含Makefile的目录上方存在一个目录。
  • 其他Makefile命令起作用。
  • source ../env/bin/activate在命令行上有效。

我想知道关于Makefile的一些特殊信息,我不明白这会导致失败吗?

python makefile python-venv
1个回答
1
投票

这具有更多的层次,您可能会发现下一步,但是一次。食谱是在shell中执行的,更具体地说,默认情况下,我还是以/bin/sh为例,它不理解source,因此...将Makefile更改为:

env:
        . ../env/bin/activate     

或定义make SHELL变量来表示/bin/bash,它将似乎起作用:

SHELL := /bin/bash
env:
        source ../env/bin/activate

但是,下一件事...食谱的一行执行fork()自己的外壳程序(环境),因此您对一个外壳程序实例(通过提供脚本)所做的更改不会影响下一个外壳程序实例。您可以解决这个问题,并通过将多个配方命令连接为实际一行来生成一个外壳(转义换行符,并使用;分隔命令:

env:
        . ../env/bin/activate ; \
        SOME_COMMAND

但是这仅对作为该命令行一部分的命令有效。

您可能会考虑在多个配方中进行相同的操作,但是实际上,如果需要使环境对make中发生的任何事情都有效,那么您可能只想在调用make之前先激活它。

© www.soinside.com 2019 - 2024. All rights reserved.