You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 11下Makefile运行Python程序未激活虚拟环境的问题咨询

解决Windows 11下Makefile中虚拟环境运行Python脚本的问题

问题根源

Make在Windows下执行每个命令时会启动独立子进程,直接调用activate脚本只会在该子进程内激活虚拟环境,无法影响后续Python命令的进程,也不会让父PowerShell窗口显示环境标识。你用$(PYTHON)直接运行脚本时,虽然用的是虚拟环境的解释器,但如果脚本里调用了其他全局工具(比如直接用pip),就会出现环境不匹配的情况。

解决方案

要让脚本全程在虚拟环境上下文里执行,需把激活环境和运行脚本放在同一个Shell进程中完成。针对PowerShell,修改Makefile的run目标如下:

VENV = test
PYTHON = $(VENV)/Scripts/python
PIP = $(VENV)/Scripts/pip
ACTIVATE = $(VENV)/Scripts/activate.ps1  # 明确指定PowerShell激活脚本

run: $(ACTIVATE)
    powershell -Command "& '$(ACTIVATE)'; $(PYTHON) api/app.py"

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

deactivate:
    @echo 请在PowerShell中手动执行: deactivate

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

关键说明

  • 用powershell -Command串联激活和运行命令,确保两者在同一个PowerShell进程内执行,激活环境的效果会覆盖整个进程。
  • 明确指定activate.ps1,避免和cmd的批处理脚本混淆。
  • deactivate命令无法通过Make生效,因为Make子进程无法修改父PowerShell的环境,只能提示用户手动执行。

验证方法

运行make run后,可在app.py中加入以下代码验证环境:

import sys
print("Python解释器路径:", sys.executable)
print("依赖包路径:", sys.path)

输出路径应包含test\Scripts\python.exe和test\Lib\site-packages,说明脚本确实在虚拟环境中运行。

内容的提问来源于stack exchange,提问作者Javi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:07:24