如何在GitHub Actions工作流中跨步骤激活Python虚拟环境?
问题原因
GitHub Actions的每个run步骤都是独立的PowerShell会话,激活虚拟环境的操作(Activate.ps1)只会修改当前会话的环境变量,切换到下一个步骤后,会话重置,环境变量也会恢复原状,因此找不到python命令。
解决方案
有两种常用方式可以让虚拟环境在所有步骤中生效:
方式一:直接调用虚拟环境内的Python/Pip绝对路径
无需依赖环境变量,直接指定虚拟环境中python和pip的完整路径,每个步骤都能直接使用:
- name: Set up Python ${{ inputs.python-version }} run: | py -${{ inputs.python-version }} -m venv .\venv .\venv\Scripts\python.exe -m pip install --upgrade pip .\venv\Scripts\python.exe -m pip install tox - name: Install dependencies run: | .\venv\Scripts\python.exe -m pip install --upgrade pip .\venv\Scripts\python.exe -m pip install tox
方式二:将虚拟环境路径写入全局环境变量
激活虚拟环境后,把更新后的PATH环境变量写入GITHUB_ENV,让后续步骤继承这个PATH,就能直接使用python命令:
- name: Set up Python ${{ inputs.python-version }} run: | py -${{ inputs.python-version }} -m venv .\venv # 激活虚拟环境 & .\venv\Scripts\Activate.ps1 # 将包含虚拟环境Scripts目录的PATH写入全局环境变量 echo "PATH=$env:PATH" >> $env:GITHUB_ENV # 当前步骤正常使用python命令 python -m pip install --upgrade pip python -m pip install tox - name: Install dependencies run: | # 后续步骤直接使用python命令即可 python -m pip install --upgrade pip python -m pip install tox
也可以手动构建PATH,跳过激活环境的步骤:
- name: Set up Python ${{ inputs.python-version }} run: | py -${{ inputs.python-version }} -m venv .\venv # 获取虚拟环境Scripts目录的绝对路径 $venvScriptsPath = (Resolve-Path .\venv\Scripts).Path # 将该路径加到PATH最前面,写入全局环境变量 echo "PATH=$venvScriptsPath;$env:PATH" >> $env:GITHUB_ENV # 当前步骤使用绝对路径或后续步骤直接用python .\venv\Scripts\python.exe -m pip install --upgrade pip .\venv\Scripts\python.exe -m pip install tox - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install tox
内容的提问来源于stack exchange,提问作者usan
相关产品推荐
相关产品推荐

