powershell 从Makefile激活Python虚拟环境

xam8gpfp  于 2023-05-17  发布在  Shell
关注(0)|答案(1)|浏览(222)

我在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/ www.example.com之前,我曾尝试在run命令中添加此命令app.py,但似乎也没有激活它。我还尝试了解决方案here,即。在执行应用程序之前添加test\Scripts\activate && exec bash,但exec未被识别为命令。用$(ACTIVATE)替换test\Scripts\activate也不起作用,因为它说test不被识别为命令。
如何确保API/app.py在虚拟环境中运行?

hmmo2u0o

hmmo2u0o1#

我想我会这样做:

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

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

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

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

我不认为在 Makefile 中包含activatedeactivate规则有什么意义,我甚至不认为它会起作用,所以我跳过了它们。您在问题中链接的trick是用于 Linux 上的 bash 的,我很确定它在Windows上不起作用,我想不出在Windows上起作用的解决方案。

相关问题