2

I'm making a program in pyqt4, using python3.4 and host on Gitlab. When I'm trying to make a build this fails. This is the .gitlab-ci.yml file form my project:

 before_script:
     - apt-get update -qy
     - apt-get install -y python3 python3-dev python3-pip python3-pyqt4
     - export DISPLAY=:0.0

test:
    script:
        - python3 main.py

The error is: main.py: cannot connect to X server: 0.0. I am trying without export DISPLAY=:0.0 and nothing

3
  • That error means you do not have a graphical environment running. It would be helpful if we could see the python script (or parts of it) to help you with this further. Commented Jun 9, 2016 at 18:36
  • It looks like this thread addresses your issue: stackoverflow.com/questions/13215120/… Commented Jun 9, 2016 at 18:40
  • The code can you find here Commented Jun 9, 2016 at 19:37

3 Answers 3

3

If PyQt5 is an option, Qt 5 has the "minimal" platform plugin. To use it, modify the argv passed to QApplication to include ['-platform', 'minimal'].

(reference: https://stackoverflow.com/a/35355906/829568)

For PyQt4, you could use a virtual X Server:

sudo apt-get install xvfb
xvfb-run python render.py

(reference: https://stackoverflow.com/a/13215192/829568)

Sign up to request clarification or add additional context in comments.

Comments

3

I've tried:

  • include ['-platform', 'minimal'] in sys.argv for QApplication : Failed
  • tried xvfb : Got xvfb-run: error: xauth command not found (even after setting the PATH)

But QT_QPA_PLATFORM: "offscreen" work like a charm and saved the day.

example:

pytest:
  image: python:3.6
  variables:
    QT_QPA_PLATFORM: "offscreen"
  script:
    - pytest tests/

Thanks to steve

Comments

1

Would like to suggest an alternative answer to azzamasa's

  1. Using pytest with pytest-qt, add a pytest option (preferably in conftest.py) to indicate if the application should show or not:

    def pytest_addoption(parser):
        parser.addoption('--show-gui', action='store_true')
    
  2. Use qapp_args fixture to provide the needed arguments -platform offscreen:

    @pytest.fixture(scope="session")
    def qapp_args(show_gui: bool):
        if not show_gui:
            empty_arg_stands_for_exe_path = ''
            return [empty_arg_stands_for_exe_path, '-platform', 'offscreen']
        return []
    

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.