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.
This commit is contained in:
Per A. Brodtkorb 2018-01-10 16:44:26 +01:00 committed by GitHub
parent cf9b31bd5a
commit 820ea6d68f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 1 deletions

View File

@ -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 your frozen program work as the pytest runner by some clever
argument handling during program startup. This allows you to argument handling during program startup. This allows you to
have a single executable, which is usually more convenient. 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 .. code-block:: python
# contents of app_main.py # contents of app_main.py
import sys import sys
import pytest_timeout # Third party plugin
if len(sys.argv) > 1 and sys.argv[1] == '--pytest': if len(sys.argv) > 1 and sys.argv[1] == '--pytest':
import pytest import pytest
sys.exit(pytest.main(sys.argv[2:])) sys.exit(pytest.main(sys.argv[2:], plugins=[pytest_timeout]))
else: else:
# normal application execution: at this point argv can be parsed # normal application execution: at this point argv can be parsed
# by your argument-parsing library of choice as usual # 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:: application with standard ``pytest`` command-line options::
./app_main --pytest --verbose --tb=long --junitxml=results.xml test-suite/ ./app_main --pytest --verbose --tb=long --junitxml=results.xml test-suite/