我习惯使用虚拟环境。但是由于某些原因,我无法在 GitHub Action 作业中激活虚拟环境。
为了调试,我添加了以下步骤:
- name: Activate virtualenv
run: |
echo $PATH
. .venv/bin/activate
ls /home/runner/work/<APP>/<APP>/.venv/bin
echo $PATH
我可以看到操作日志。
/opt/hostedtoolcache/Python/3.9.13/x64/bin:/opt/hostedtoolcache/Python/3.9.13/x64:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[...] # Cut here because a lot of lines are displayed. My executables are present including the one I'm trying to execute : pre-commit.
/home/runner/work/<APP>/<APP>/.venv/bin:/opt/hostedtoolcache/Python/3.9.13/x64/bin:/opt/hostedtoolcache/Python/3.9.13/x64:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
所以它应该能够工作...
但下一步是:
- name: Linters
run: pre-commit
生成错误日志
Run pre-commit
pre-commit
shell: /usr/bin/bash -e {0}
env:
[...] # private
/home/runner/work/_temp/8e893c8d-5032-4dbb-8a15-59be68cb0f5d.sh: line 1: pre-commit: command not found
Error: Process completed with exit code 127.
如果我按照以下方式转换上面的步骤,我没有任何问题:
- name: Linters
run: .venv/bin/pre-commit
由于某些原因,Bash无法找到我的可执行文件,尽管包含它的文件夹已在
$PATH
中引用。
venv-run
可以简化很多 https://github.com/guludo/venv-run,或者切换到其他虚拟环境选项,如具有本地conda run
和pipenv run
的 Conda/Pipenv。 - Lex LiVIRTUAL_ENV
,在某些情况下会被使用。它还创建了一个deactivate
命令以供稍后使用,尽管在 CI 上下文中这个命令不太有用。 - Philip Couling