Makefile“激活”Python虚拟环境

aar*_*gon 2 makefile gnu-make virtualenv

我正在尝试使用 Makefile 创建一个 Python 虚拟环境,并在 make 命令完成后激活它,以方便用户操作。显然,这是不可能的,因为“子进程无法改变父进程的环境”。我想知道是否有任何解决方法。到目前为止,这是我的 Makefile 的一部分: .PHONY: create-venv venv .DEFAULT_GOAL := all SHELL=/bin/bash

CPUTYPE = $(shell uname -m | sed "s/\\ /_/g")
SYSTYPE = $(shell uname -s)
BUILDDIR = build/$(SYSTYPE)-$(CPUTYPE)
VENV_NAME?=venv
VENV_DIR=$(BUILDDIR)/${VENV_NAME}
VENV_BIN=$(shell pwd)/${VENV_DIR}/bin
VENV_ACTIVATE=. ${VENV_BIN}/activate

PYTHON=${VENV_BIN}/python3

create-venv:
    test -d $(BUILDDIR) || mkdir -p $(BUILDDIR)
    which python3 || apt install -y python3 python3-pip
    test -d $(VENV_DIR) || python3 -m venv $(VENV_DIR)

venv: ${VENV_BIN}/activate
${VENV_BIN}/activate: setup.py
    test -d $(VENV_DIR) || make create-venv
    ${PYTHON} -m pip install -r requirements.txt
    touch $(VENV_BIN)/activate
    source ${VENV_BIN}/activate # <- doesn't work
    . ${VENV_BIN}/activate # <- doesn't work either
Run Code Online (Sandbox Code Playgroud)

phd*_*phd 5

您可以激活环境并在激活的环境中运行 shell:

. ${VENV_BIN}/activate && exec bash
Run Code Online (Sandbox Code Playgroud)

(请注意,它必须在一行中才能在一个 shell 中运行;exec用于用新的 shell 替换 shell。)

当您完成环境工作后,您将退出,然后 Makefile 就完成了。