Доступ к буферу обмена в Travis-CI

Я пытаюсь запустить тест (интеграцию?) в моем приложении, чтобы убедиться, что он фактически копирует ожидаемую строку в буфер обмена с помощью 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 docs):

  • sudo apt-get install xsel для установки утилиты xsel.
  • sudo apt-get install xclip для установки утилиты xclip.
  • pip install gtk для установки модуля gtk Python.
  • pip install PyQt4 для установки модуля Python PyQt4.

Итак, в моем файле .travis.yml у меня есть

before_install:
  - sudo apt-get install xclip

Я также пробовал xsel с теми же результатами.

Поскольку система на travis — Ubuntu 16.04.6, я попытался добавить sudo apt-get install python3-pyperclip к ключу before_install с тем же результатом.

Мне не удалось установить ни gtk, ни PyQt4, добавив их в ключ 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

Это кажется излишним (и все еще не работает); но в настоящее время у меня нет идей о том, как пройти этот тест. Любые указатели будут очень признательны.

Спасибо


person JJC    schedule 01.09.2019    source источник
comment
Почему бы тебе не издеваться над pyperclip?   -  person André Roggeri Campos    schedule 01.09.2019


Ответы (1)


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 тоже вполне допустимо, просто дело вкуса.

person hoefling    schedule 01.09.2019
comment
Это сработало. Спасибо за объяснение. Мне также больше понравился формат аддонов; Спасибо за чаевые. - person JJC; 02.09.2019
comment
Рад, что смог помочь! - person hoefling; 02.09.2019