From 820ea6d68f96ed320af5df14ecedbf20a86ed5b2 Mon Sep 17 00:00:00 2001 From: "Per A. Brodtkorb" Date: Wed, 10 Jan 2018 16:44:26 +0100 Subject: [PATCH] Update Freezing pytest description in simple.rst I have trouble using third party plugins in my frozen program and discovered that other people have experienced it as well: https://mail.python.org/pipermail//pytest-dev/2015-June/003015.html The problem is that the mechanism for plugin discovery used by pytest (setupttools entry points) doesn't work with frozen executables so pytest can't find any plugins. The solution seems to be to import the third party plugins explicitly as shown here: https://mail.python.org/pipermail//pytest-dev/2015-June/003018.html This is not mentioned anywhere in the documentaion. --- doc/en/example/simple.rst | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/en/example/simple.rst b/doc/en/example/simple.rst index 9c773aaedbd..5dbf0a5198b 100644 --- a/doc/en/example/simple.rst +++ b/doc/en/example/simple.rst @@ -826,15 +826,20 @@ Instead of freezing the pytest runner as a separate executable, you can make your frozen program work as the pytest runner by some clever argument handling during program startup. This allows you to have a single executable, which is usually more convenient. +Please note that the mechanism for plugin discovery used by pytest +(setupttools entry points) doesn't work with frozen executables so pytest +can't find any third party plugins automatically. To include third party plugins +like ``pytest-timeout`` they must be imported explicitly and passed on to pytest.main. .. code-block:: python # contents of app_main.py import sys + import pytest_timeout # Third party plugin if len(sys.argv) > 1 and sys.argv[1] == '--pytest': import pytest - sys.exit(pytest.main(sys.argv[2:])) + sys.exit(pytest.main(sys.argv[2:], plugins=[pytest_timeout])) else: # normal application execution: at this point argv can be parsed # by your argument-parsing library of choice as usual @@ -845,3 +850,4 @@ This allows you to execute tests using the frozen application with standard ``pytest`` command-line options:: ./app_main --pytest --verbose --tb=long --junitxml=results.xml test-suite/ +