从 Makefile 中激活 Python 虚拟环境

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

我在 Windows 11 上的文件夹中有以下

Makefile
.

VENV = test
PYTHON = $(VENV)/Scripts/python
PIP = $(VENV)/Scripts/pip
ACTIVATE = $(VENV)/Scripts/activate

run: $(ACTIVATE)
    $(PYTHON) api/app.py

$(ACTIVATE): requirements.txt
    py -m venv $(VENV)
    $(PIP) install -r requirements.txt

deactivate: $(ACTIVATE)
    $(VENV)/deactivate

.PHONY: clean
clean:
    rmdir $(VENV) /s /q
    rmdir api\__pycache__ /s /q

当我在 PowerShell 上执行

make run
时,它成功地创建了虚拟环境,安装了要求并运行了 app.py。但是,我注意到它没有在虚拟环境中运行。换句话说,它不是在运行前激活环境。

我认为它没有在虚拟环境中运行的原因是因为当我停止应用程序时,命令行不会像通常那样在左侧显示“(test)”。我还检查了一些已安装的软件包,以确保我不在虚拟环境中。

如果我手动完成,我只需输入

test\Scripts\activate
。我试过在执行 api/app.py 之前在运行命令中添加它,但它似乎也没有激活它。我也尝试过here的解决方案,即在执行应用程序之前添加
test\Scripts\activate && exec bash
,但
exec
不被识别为命令。将
test\Scripts\activate
替换为
$(ACTIVATE)
也不起作用,因为它表示
test
未被识别为命令。

如何确保 api/app.py 在虚拟环境中运行?

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

我想我会做这样的事情:

VENV = test
PYTHON = $(VENV)/Scripts/python

.PHONY: run
run: $(PYTHON)
    $(PYTHON) api/app.py

$(PYTHON): requirements.txt
    py -m venv $(VENV)
    $(PYTHON) -m pip install --requirement requirements.txt

.PHONY: clean
clean:
    rmdir $(VENV) /s /q
    rmdir api\__pycache__ /s /q

我认为在

Makefile
中使用
activate
deactivate 规则是没有意义的,我认为它甚至不会起作用,所以我跳过它们。您在问题中链接的 trick 适用于 Linux 上的 bash,我很确定它不会在 Windows 上运行,而且我想不出可以在 Windows 上运行的解决方案。

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