我目前正在开发一个依赖 PyAutoGUI 来控制鼠标的 Python 项目。在将任何新更改推送到 GitHub 之前,我设置了一组要在我的计算机上运行的测试,但我还想在 GitHub Actions 上设置一个工作流程,以在推送时构建和测试我的应用程序。
但是,正如你可以想象的那样,我的问题是在 GitHub Actions 上运行测试的环境没有屏幕也没有鼠标。我的脚本只需要访问屏幕分辨率(
width, height = pyautogui.size()
)并执行简单的操作(例如pyautogui.click('left')
,pyautogui.scroll(...)
)。我的测试实际上并不需要弹出任何窗口来对它们执行操作,只需能够运行这些简单的功能即可。
目前看来问题是缺少显示:
[...]
import pyautogui
File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/pyautogui/__init__.py", line 249, in <module>
import mouseinfo
File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/mouseinfo/__init__.py", line 223, in <module>
_display = Display(os.environ['DISPLAY'])
File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/os.py", line 681, in __getitem__
raise KeyError(key) from None
KeyError: 'DISPLAY'
因为
DISPLAY
环境变量不存在(或者由于缺少显示而可能等于 :0
)。我还不确定鼠标是否是一个问题,因为它没有超出显示步骤,但我预计它也会有问题。
有谁知道如何在 GitHub Actions 运行器上模拟屏幕和鼠标的存在?或者有什么解决办法吗?
经过多次尝试,终于成功了。我对 X 服务器一无所知,所以这感觉就像是一个奇迹。
对于任何感兴趣的人来说,只需安装并运行
xvfb
和Python即可。这是我工作流程的关键部分:
[...]
- name: Install
run: |
sudo apt-get install xvfb
pip install -r requirements.txt
pip install .
- name: Run tests
run: |
xvfb-run -a -s "-screen 0 640x480x8" python -m unittest discover -s tests
Python 只需要在与
xvfb-run
相同的命令上运行即可,仅此而已。这会适当地设置 DISPLAY
变量并解决依赖它的 PyAutoGUI 导入问题。然后,无论是否有鼠标,PyAutoGUI 中与鼠标相关的操作都会毫无问题地执行。
感谢您让我走上正确的道路。
干杯。
感谢救星@JoHoward!!!为我工作并添加了一些内容:
name: Push
on: push
jobs:
pytest:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository # must checkout!
uses: actions/checkout@v3
- name: Setup python
uses: actions/setup-python@v4
- name: Build environment
run: pip install --no-cache-dir -r requirements.txt
- name: Pytest with pyautogui
run: |
sudo apt-get install xvfb python3-tk python3-dev
xvfb-run -a -s "-screen 0 640x480x8" pytest -v