2

我正在尝试在我的应用程序上运行(集成?)测试,以验证它是否确实将预期的字符串复制到剪贴板pyperclip

这部分正在我的开发机器(Windows 10)上工作;但在 travis-ci 上失败,我在 travis 工作日志中得到以下信息。

self = <pyperclip.init_no_clipboard.<locals>.ClipboardUnavailable object at 0x7ff0cd743588>
args = ('7 809823 102890 string 291',), kwargs = {}
    def __call__(self, *args, **kwargs):
>       raise PyperclipException(EXCEPT_MSG)
E       pyperclip.PyperclipException: 
E           Pyperclip could not find a copy/paste mechanism for your system.
E           For more information, please visit https://pyperclip.readthedocs.io/en/latest/introduction.html#not-implemented-error
../../../virtualenv/python3.7.1/lib/python3.7/site-packages/pyperclip/__init__.py:301: PyperclipException

根据pyperclip 文档,当没有复制/粘贴机制时,这发生在 Linux 上。解决方案是安装以下之一(引用pyperclip文档):

  • sudo apt-get install xsel安装 xsel 实用程序。
  • sudo apt-get install xclip安装 xclip 实用程序。
  • pip install gtk安装 gtk Python 模块。
  • pip install PyQt4安装 PyQt4 Python 模块。

所以在我的.travis.yml文件中,我有

before_install:
  - sudo apt-get install xclip

我也试过xsel了,结果一样。

由于 travis 上的系统是 Ubuntu 16.04.6,我尝试添加sudo apt-get install python3-pyperclip密钥before_install,结果相同。

我无法安装gtkPyQt4将它们添加install.travis.yml.

install:
  - pip install -r requirements_dev.txt
  - pip install PyQt4
  # or
  - pip install gtk

因为这两者都会导致以下错误:

 Could not find a version that satisfies the requirement gtk (from versions: )
No matching distribution found for gtk
The command "pip install gtk" failed and exited with 1 during .

至此,我的before_install样子是这样的:

  - sudo apt-get install xclip
  - sudo apt-get install xsel
  - sudo apt-get install python3-pyperclip
  - sudo apt-get install gtk2.0

这似乎有点矫枉过正(而且仍然不起作用);但我目前对如何通过该测试没有任何想法。任何指针将不胜感激。

谢谢

4

1 回答 1

4

xclip需要运行 X 服务器,而 Travis 机器以无头模式运行。您需要在虚拟帧缓冲区中运行命令;xvfb除了安装xclip并使用xvfb-run pytest代替pytest. 完整配置示例:

language: python
addons:
  apt:
    packages:
    - xclip
    - xvfb
python:
  - "3.7"

# setup installation
install:
  - pip install -r requirements_dev.txt

script: xvfb-run pytest

这是基于 Travis 构建的示例。请注意,我曾经addons声明应该与 APT 一起安装的依赖项;您在一个部分中明确安装它们的解决方案before_install也是完全有效的,只是一个品味问题。

于 2019-09-01T09:07:01.040 回答