Closed asmodehn closed 6 years ago
Travis job illustrating the problem : https://travis-ci.org/asmodehn/pyros-setup/jobs/156150350
Note this happens only when launching pytest from the package itself (as part of __main__.py
)
When launching pytest directly it doesnt happen : https://travis-ci.org/asmodehn/pyros-setup/jobs/156141458
So there is likely a problem with the way pytest is run from main...
I'd appreciate even a dirty workaround if there is no immediate fix, as it s really important for user of this package to run this test from installation... I have tried a few (like inspecting the option list before adding) but none seems to make any difference so far...
Thanks a lot !
I put a few print statements in pytest's config.py, and it does seems like pytest_addoption
in conftest.py
is indeed called multiple times in that usecase :
(pyros-setup) alexv@asmodehn:~/Projects/pyros-setup$ pyros_setup --pytest
Existing options in general : ['-k', '-m']
Existing options in collect : []
Existing options in collect : ['--collectonly', '--collect-only']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest']
Existing options in debugconfig : []
Existing options in terminal reporting : ['-v', '--verbose', '-q', '--quiet', '-r', '--disable-pytest-warnings', '-l', '--showlocals', '--tb', '--fulltrace', '--full-trace', '--color']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s']
Existing options in debugconfig : ['--basetemp']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config', '--debug', '-o', '--override-ini']
Existing options in terminal reporting : ['-v', '--verbose', '-q', '--quiet', '-r', '--disable-pytest-warnings', '-l', '--showlocals', '--tb', '--fulltrace', '--full-trace', '--color', '--durations', '--pastebin']
Existing options in terminal reporting : ['-v', '--verbose', '-q', '--quiet', '-r', '--disable-pytest-warnings', '-l', '--showlocals', '--tb', '--fulltrace', '--full-trace', '--color', '--durations', '--pastebin', '--junitxml', '--junit-xml']
Existing options in terminal reporting : ['-v', '--verbose', '-q', '--quiet', '-r', '--disable-pytest-warnings', '-l', '--showlocals', '--tb', '--fulltrace', '--full-trace', '--color', '--durations', '--pastebin', '--junitxml', '--junit-xml', '--junitprefix', '--junit-prefix']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest', '--keepduplicates', '--keep-duplicates']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest', '--keepduplicates', '--keep-duplicates', '--doctest-modules']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest', '--keepduplicates', '--keep-duplicates', '--doctest-modules', '--doctest-report']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest', '--keepduplicates', '--keep-duplicates', '--doctest-modules', '--doctest-report', '--doctest-glob']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s', '--runxfail']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s', '--runxfail', '--lf', '--last-failed']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s', '--runxfail', '--lf', '--last-failed', '--ff', '--failed-first']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s', '--runxfail', '--lf', '--last-failed', '--ff', '--failed-first', '--cache-show']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config', '--debug', '-o', '--override-ini', '--assert']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config', '--debug', '-o', '--override-ini', '--assert', '--setuponly', '--setup-only']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config', '--debug', '-o', '--override-ini', '--assert', '--setuponly', '--setup-only', '--setupshow', '--setup-show']
options detected : []
Parser.addoption CALLED WITH opts : ('--distro',)
Existing options in custom options : []
========================================================================================================= test session starts =========================================================================================================
platform linux2 -- Python 2.7.6, pytest-3.0.1, py-1.4.31, pluggy-0.3.1
rootdir: /home/alexv/Projects/pyros-setup, inifile:
options detected : ['--distro']
Parser.addoption CALLED WITH opts : ('--distro',)
Existing options in custom options : ['--distro']
collected 0 items / 1 errors
While fiddling with it, it seems the first call is because of a conftest.py visible from my current directory. The second call however is from the conftest.py inside the package.
Changing my current dir to not have the source of the packege under the current directory fixes the problem...
Is there a way for pytest to prevent collecting from current directory ?
Maybe the confcutdir
setting helps somehow? Unfortunately I'mnot sure what's going on, and currently lack the time to investigate...
im experiencing something similar and will investigate at work
More information about this issue...
On the other hand, having a conftest.py
file in an installed package is sometimes detected :
(pyros-setup) alexv@asmodehn:~/Projects/pyros-setup/testing$ pyros_setup --pytest
Existing options in general : ['-k', '-m']
Existing options in collect : []
Existing options in collect : ['--collectonly', '--collect-only']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest']
Existing options in debugconfig : []
Existing options in terminal reporting : ['-v', '--verbose', '-q', '--quiet', '-r', '--disable-pytest-warnings', '-l', '--showlocals', '--tb', '--fulltrace', '--full-trace', '--color']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s']
Existing options in debugconfig : ['--basetemp']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config', '--debug', '-o', '--override-ini']
Existing options in terminal reporting : ['-v', '--verbose', '-q', '--quiet', '-r', '--disable-pytest-warnings', '-l', '--showlocals', '--tb', '--fulltrace', '--full-trace', '--color', '--durations', '--pastebin']
Existing options in terminal reporting : ['-v', '--verbose', '-q', '--quiet', '-r', '--disable-pytest-warnings', '-l', '--showlocals', '--tb', '--fulltrace', '--full-trace', '--color', '--durations', '--pastebin', '--junitxml', '--junit-xml']
Existing options in terminal reporting : ['-v', '--verbose', '-q', '--quiet', '-r', '--disable-pytest-warnings', '-l', '--showlocals', '--tb', '--fulltrace', '--full-trace', '--color', '--durations', '--pastebin', '--junitxml', '--junit-xml', '--junitprefix', '--junit-prefix']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest', '--keepduplicates', '--keep-duplicates']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest', '--keepduplicates', '--keep-duplicates', '--doctest-modules']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest', '--keepduplicates', '--keep-duplicates', '--doctest-modules', '--doctest-report']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest', '--keepduplicates', '--keep-duplicates', '--doctest-modules', '--doctest-report', '--doctest-glob']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s', '--runxfail']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s', '--runxfail', '--lf', '--last-failed']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s', '--runxfail', '--lf', '--last-failed', '--ff', '--failed-first']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s', '--runxfail', '--lf', '--last-failed', '--ff', '--failed-first', '--cache-show']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config', '--debug', '-o', '--override-ini', '--assert']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config', '--debug', '-o', '--override-ini', '--assert', '--setuponly', '--setup-only']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config', '--debug', '-o', '--override-ini', '--assert', '--setuponly', '--setup-only', '--setupshow', '--setup-show']
========================================================================================================= test session starts =========================================================================================================
platform linux2 -- Python 2.7.6, pytest-3.0.1, py-1.4.31, pluggy-0.3.1
rootdir: /home/alexv/Projects/pyros-setup, inifile:
Parser.addoption CALLED WITH opts : ('--distro',)
Existing options in custom options : []
collected 1 items
[...]
And sometimes not :
(pyros-setup) alexv@asmodehn:~/Projects/pyros-setup/testing$ pyros_setup --pytest --distro indigo
Existing options in general : ['-k', '-m']
Existing options in collect : []
Existing options in collect : ['--collectonly', '--collect-only']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest']
Existing options in debugconfig : []
Existing options in terminal reporting : ['-v', '--verbose', '-q', '--quiet', '-r', '--disable-pytest-warnings', '-l', '--showlocals', '--tb', '--fulltrace', '--full-trace', '--color']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s']
Existing options in debugconfig : ['--basetemp']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config', '--debug', '-o', '--override-ini']
Existing options in terminal reporting : ['-v', '--verbose', '-q', '--quiet', '-r', '--disable-pytest-warnings', '-l', '--showlocals', '--tb', '--fulltrace', '--full-trace', '--color', '--durations', '--pastebin']
Existing options in terminal reporting : ['-v', '--verbose', '-q', '--quiet', '-r', '--disable-pytest-warnings', '-l', '--showlocals', '--tb', '--fulltrace', '--full-trace', '--color', '--durations', '--pastebin', '--junitxml', '--junit-xml']
Existing options in terminal reporting : ['-v', '--verbose', '-q', '--quiet', '-r', '--disable-pytest-warnings', '-l', '--showlocals', '--tb', '--fulltrace', '--full-trace', '--color', '--durations', '--pastebin', '--junitxml', '--junit-xml', '--junitprefix', '--junit-prefix']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest', '--keepduplicates', '--keep-duplicates']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest', '--keepduplicates', '--keep-duplicates', '--doctest-modules']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest', '--keepduplicates', '--keep-duplicates', '--doctest-modules', '--doctest-report']
Existing options in collect : ['--collectonly', '--collect-only', '--pyargs', '--ignore', '--confcutdir', '--noconftest', '--keepduplicates', '--keep-duplicates', '--doctest-modules', '--doctest-report', '--doctest-glob']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s', '--runxfail']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s', '--runxfail', '--lf', '--last-failed']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s', '--runxfail', '--lf', '--last-failed', '--ff', '--failed-first']
Existing options in general : ['-k', '-m', '--markers', '-x', '--exitfirst', '--maxfail', '--strict', '-c', '--continue-on-collection-errors', '--fixtures', '--funcargs', '--fixtures-per-test', '--import-mode', '--pdb', '--pdbcls', '--capture', '-s', '--runxfail', '--lf', '--last-failed', '--ff', '--failed-first', '--cache-show']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config', '--debug', '-o', '--override-ini', '--assert']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config', '--debug', '-o', '--override-ini', '--assert', '--setuponly', '--setup-only']
Existing options in debugconfig : ['--basetemp', '--version', '-h', '--help', '-p', '--traceconfig', '--trace-config', '--debug', '-o', '--override-ini', '--assert', '--setuponly', '--setup-only', '--setupshow', '--setup-show']
usage: pyros_setup [options] [file_or_dir] [file_or_dir] [...]
pyros_setup: error: unrecognized arguments: --distro indigo
inifile: None
rootdir: /home/alexv/Projects/pyros-setup
(pyros-setup) alexv@asmodehn:~/Projects/pyros-setup/testing$
Seems we fail here, even before getting the conftest.py
Both commands were run in a virtualenv where the package was installed with pip install .
For reference, the code doing the py.test run is (in __main__.py
):
def main():
if len(sys.argv) > 1:
if sys.argv[1] == '--pytest':
import pytest # import only if needed
errno = pytest.main(['-s', '--pyargs', 'pyros_setup'] + sys.argv[2:])
sys.exit(errno)
From memory, the behavior I described earlier (with conftest.py parsed two times) was happening when the package was installed with pip install -e .
So the editable / egg-link feature likely plays a role there...
now im confident im facing the same issue
@asmodehn i managed to revisit this one, and the isuse seems to be that the local conftest and the pyargs triggered conftest are mismatched wrt the fs location thus they are eligible for both types of import
after reading the custom sys.path setup im reasonably sure this is self inflicted, i suggest debugging with capure disabled and printing name of the conftests
Closing for now; we will be happy to re-open this once we get more information.
Repository with project and commit causing the problem : https://github.com/asmodehn/pyros-setup/commit/81a4c6e4b1d718d88c985f21a1bfa99f2e5ba994
Symptom :
Recipe :
pip install -e .
Launching withpyros_setup --pytest --distro=indigo
should work fine (test fail or succeed depending on your system state and on that option)pip uninstall pyros_setup
pip install .
Launching withpyros_setup --pytest --distro=indigo
fail with the errorValueError: option names set(['--distro']) already added
On Ubuntu Trusty, here is my virtual env pip list (using system packages) :