Python 在 GitHub 操作上看不到环境变量
Python not seeing environment variables on GitHub Actions
我有一些连接到测试 Postgres 数据库的 pytest 测试。这些在当地运作良好。但是,在 GitHub 操作中,没有 Postgres 数据库,因此我必须禁用具有这些测试的整个模块。
根据 the docs,CI Always set to true.
所以我所要做的就是检查 CI env-var,如果存在并设置测试模块则将其禁用:
if os.getenv('CI'):
pytest.skip("No PostgreSQL on GH Actions CI/CD", allow_module_level=True)
无效。
我尝试手动设置它,通过 env:
手动设置其他环境变量,但是 Python 可以看到其中的 none。通过否定上述测试 not os.getenv('CI')
在本地禁用模块按预期工作。
可能是什么问题?
您没有向我们展示任何代码,但是如果我使用以下 .github/workflows/environment.yml
:
设置存储库
---
name: "Environment test"
on:
push:
workflow_dispatch:
jobs:
show_environment:
name: "Show environment variables"
runs-on: ubuntu-latest
steps:
- name: "Show environmetn variables"
run: |
env
python_test:
name: "Reproduce behavior from
runs-on: ubuntu-latest
steps:
- name: "Checkout repository"
uses: actions/checkout@v2
- name: "Set up python"
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: "Run python script"
run: |
python actiontest.py
并将此 actiontest.py
包含在存储库中:
import os
if os.getenv('CI'):
print('Looks like GitHub!')
else:
print('Maybe running locally?')
这一切似乎都按照记录工作。 show environment shows that the CI
variable is defined as expected, and the actiontest.py script 成功检测到该变量。
如果您看到不同的行为,请在您的问题中包含一个完整的可重现示例,我们很乐意帮助您了解发生了什么。
知道了。我正在使用 tox to run the tests among other things. Turns out tox doesn't copy the parent env unless it's told to via the passenv
directive. Here's the SO answer 清除它。
我有一些连接到测试 Postgres 数据库的 pytest 测试。这些在当地运作良好。但是,在 GitHub 操作中,没有 Postgres 数据库,因此我必须禁用具有这些测试的整个模块。
根据 the docs,CI Always set to true.
所以我所要做的就是检查 CI env-var,如果存在并设置测试模块则将其禁用:
if os.getenv('CI'):
pytest.skip("No PostgreSQL on GH Actions CI/CD", allow_module_level=True)
无效。
我尝试手动设置它,通过 env:
手动设置其他环境变量,但是 Python 可以看到其中的 none。通过否定上述测试 not os.getenv('CI')
在本地禁用模块按预期工作。
可能是什么问题?
您没有向我们展示任何代码,但是如果我使用以下 .github/workflows/environment.yml
:
---
name: "Environment test"
on:
push:
workflow_dispatch:
jobs:
show_environment:
name: "Show environment variables"
runs-on: ubuntu-latest
steps:
- name: "Show environmetn variables"
run: |
env
python_test:
name: "Reproduce behavior from
runs-on: ubuntu-latest
steps:
- name: "Checkout repository"
uses: actions/checkout@v2
- name: "Set up python"
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: "Run python script"
run: |
python actiontest.py
并将此 actiontest.py
包含在存储库中:
import os
if os.getenv('CI'):
print('Looks like GitHub!')
else:
print('Maybe running locally?')
这一切似乎都按照记录工作。 show environment shows that the CI
variable is defined as expected, and the actiontest.py script 成功检测到该变量。
如果您看到不同的行为,请在您的问题中包含一个完整的可重现示例,我们很乐意帮助您了解发生了什么。
知道了。我正在使用 tox to run the tests among other things. Turns out tox doesn't copy the parent env unless it's told to via the passenv
directive. Here's the SO answer 清除它。