Правильный способ установки PySide2 в качестве бэкэнда matplotlib - PullRequest
2 голосов
/ 30 июня 2019

У меня есть хранилище github, где я разрабатываю программное обеспечение для электрических расчетов .

Недавно я полностью перешел с PyQt5 на PySide2.

Сегодня я добавил Travis-CI для непрерывной интеграции в качестве хука в хранилище Githb. Это означает, что при внесении некоторых изменений travis-CI запускает сборку моего хранилища на независимой машине в их облаке.

Travis CI не работает из-за этого:

ImportError while importing test module '/home/travis/build/SanPen/GridCal/src/tests/test_branch_tolerance.py'. Hint: make sure your test modules/packages have valid Python names. Traceback: src/tests/test_branch_tolerance.py:1: in <module>
    from GridCal.Engine import * src/GridCal/Engine/__init__.py:17: in <module>
    from GridCal.Engine.basic_structures import * src/GridCal/Engine/basic_structures.py:23: in <module>
    from GridCal.Engine.plot_config import LINEWIDTH, plt src/GridCal/Engine/plot_config.py:18: in <module>
    matplotlib.use('Qt5Agg') ../../../virtualenv/python3.6.7/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:307: in wrapper
    return func(*args, **kwargs) ../../../virtualenv/python3.6.7/lib/python3.6/site-packages/matplotlib/__init__.py:1297: in use
    switch_backend(name) ../../../virtualenv/python3.6.7/lib/python3.6/site-packages/matplotlib/pyplot.py:230: in switch_backend
    newbackend, required_framework, current_framework)) 

E   ImportError: Cannot load backend 'Qt5Agg' which requires the 'qt5' interactive framework, as 'headless' is currently running

Файл с ошибкой plot_config.py в начале имеет следующую конфигурацию matplotlib:

import PySide2  # this line is necessary so that Matplotlib recognises that PySide is the Qt Backend
import matplotlib
matplotlib.use('Qt5Agg')
# matplotlib.rcParams['backend.qt5'] = 'PySide2'  # this is not supported anymore
from matplotlib import pyplot as plt

Этот код - то, что я нашел в нескольких потоках, чтобы сделать его правильно. Однако из-за них автоматизированные тесты на независимой машине не пройдены.

Итак, каков наилучший и однозначный способ заставить matplotlib использовать PySide2?

Необходимые пакеты: (needs.txt):

PySide2>=5.11 
numpy>=1.14.0 
scipy>=1.0.0 
networkx>=2.1 
pandas>=0.22 
xlwt>=1.3.0 
xlrd>=1.1.0 
matplotlib>=3.1.0 
qtconsole>=4.3.1 
pyDOE>=0.3.8 
pySOT>=0.2.1 
openpyxl>=2.4.9 
pulp>=1.6.8 
smopy>=0.0.6 
chardet>=3.0.4 
scikit-learn>=0.18 
geopy>=1.16 
pytest>=3.8 
h5py>=2.9.0

1 Ответ

3 голосов
/ 01 июля 2019

Необходимо включить службу XVFB, как указано в документах , чтобы иметь возможность тестировать библиотеки, которым требуется графическая среда:

dist: xenial   # required for Python >= 3.7
services:
  - xvfb
language: python
python:
  - "3.6"
  - "3.7"
# command to install dependencies
install:
  - pip install -r requirements.txt
# command to run tests
script:
  - pytest

Я создал PR для вашего хранилища.

...