Makefile 创建和 "activate" Python 虚拟环境
Makefile to create and "activate" Python virtual environment
我正在尝试使用 Makefile 创建一个 Python 虚拟环境,并在 make 命令完成后激活它以简化用户操作。显然,这是 not possible 因为 "a child process can not alter the parent's environment." 我想知道是否有任何解决方法。到目前为止,这是我的 Makefile 的一部分:
.PHONY: create-venv venv
.DEFAULT_GOAL := 全部
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
您可以激活环境和运行激活环境中的shell:
. ${VENV_BIN}/activate && exec bash
(请注意必须在一行中才能在一行中成为shell;exec
用于将shell替换为新的。)
当您完成环境工作后退出,然后 Makefile 就完成了。
你可以这样做。
它依赖于您查看 activate
脚本并查看它设置的环境变量,所以它非常丑陋。
$(eval $(shell source $(PYTHON3_VENV)/bin/activate && echo "export PATH := $$PATH; export PYTHONHOME := $$PYTHONHOME; export VIRTUAL_ENV := $$VIRTUAL_ENV" ))
我正在尝试使用 Makefile 创建一个 Python 虚拟环境,并在 make 命令完成后激活它以简化用户操作。显然,这是 not possible 因为 "a child process can not alter the parent's environment." 我想知道是否有任何解决方法。到目前为止,这是我的 Makefile 的一部分: .PHONY: create-venv venv .DEFAULT_GOAL := 全部 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
您可以激活环境和运行激活环境中的shell:
. ${VENV_BIN}/activate && exec bash
(请注意必须在一行中才能在一行中成为shell;exec
用于将shell替换为新的。)
当您完成环境工作后退出,然后 Makefile 就完成了。
你可以这样做。
它依赖于您查看 activate
脚本并查看它设置的环境变量,所以它非常丑陋。
$(eval $(shell source $(PYTHON3_VENV)/bin/activate && echo "export PATH := $$PATH; export PYTHONHOME := $$PYTHONHOME; export VIRTUAL_ENV := $$VIRTUAL_ENV" ))