Makefile для создания и «активации» Python виртуальной среды - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь создать виртуальную среду Python с Makefile, а также активировать ее, как только команда make завершит работу, чтобы упростить работу для пользователя. По-видимому, это невозможно , потому что «дочерний процесс не может изменить среду родителя». Мне было интересно, есть ли обходной путь для этого. Пока это часть моего 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

1 Ответ

2 голосов
/ 08 апреля 2020

Вы можете активировать среду и запустить оболочку в активированной среде:

. ${VENV_BIN}/activate && exec bash

(Обратите внимание, что для запуска в одной оболочке должна быть одна строка; exec используется для замены Оболочка с новым.)

Когда вы завершаете sh работу со средой, вы выходите, а затем Makefile завершается.

...