[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Strangely rare pytest 7.x bug report



Hi Carles,

It is utterly, utterly bizarre.  But I think I've found the problem.
There's a pytest.ini file in the package, but it's not copied into the
test directory.  So when pytest is run in the .pybuild directory, it
climbs all the way back up the directory tree to the python-qtpy-2.1.0
until it discovers the pytest.ini file there and uses that.  It sees
that we are requesting qtpy/tests, which it then expands into the
directory path .pybuild/cpython3_3.10_qtpy/build/qtpy/tests, starting
from the directory in which it found pytest.ini, and this causes the
breakage.

The solution is to copy the pytest.ini file into the .pybuild
directories by adding it to debian/pybuild.testfiles

Why this behaviour changed between pytest 6.x and pytest 7.x I don't
know; I don't see it obviously documented.  But that at least resolves
this problem.

Thanks for your help!

Best wishes,

   Julian

On Mon, Jul 04, 2022 at 08:39:32PM +0100, Carles Pina i Estany wrote:
> 
> Hi Julian,
> 
> On Jul/04/2022, Julian Gilbey wrote:
> > Hi Carles,
> > 
> > Thanks for your thoughts!  Yes, indeed that seems to be the issue.
> > But what I don't understand is why the import is turned into
> > .pybuild.cpython3_3.9_qtpy.build.qtpy.tests and not just qtpy.tests or
> 
> I see how pytest does it (but keep reading)
> 
> > a longer path, and why only this package fails in this way.  Perhaps
> > this is the only package that has an import statement in
> > pytest_configure?
> 
> This I don't know and I'm curious, and it might help disecting the issue
> (or understanding it). Do you know of any other python3 package that you
> expected to fail? (using pytest in a similar way).
> 
> I might try to get both and follow what they do different (to hopefully
> know what is python-qtpy doing different :-) )
> 
> I'm sure that there are tons of packages that use pytest :-) I'm
> wondering if you had a good candidate.
> 
> Best regards,
> 
> > 
> > Best wishes,
> > 
> >    Julian
> > 
> > On Mon, Jul 04, 2022 at 04:03:39PM +0100, Carles Pina i Estany wrote:
> > > 
> > > Hi,
> > > 
> > > I'm a lurker of debian-python@lists.debian.org but seeing Python+Qt I
> > > wanted to have a look. I don't have a solution (I might look more
> > > another time if time permits) but I might have something that might help
> > > someone who knows the tools better.
> > > 
> > > I am not familiar with Python Debian packaging details/tools neither
> > > with pytest :-( so take all of this with a pinch of salt.
> > > 
> > > If it helps the error comes from:
> > > /usr/lib/python3.9/importlib/__init__.py in the functin "import_modules"
> > > it does:
> > > """
> > >     if name.startswith('.'):
> > >         if not package:
> > >             msg = ("the 'package' argument is required to perform a relative "
> > >                    "import for {!r}")
> > >             raise TypeError(msg.format(name))
> > > """
> > > 
> > > When the import fails the "name" parameter of "import_modules" function
> > > is: '.pybuild.cpython3_3.9_qtpy.build.qtpy.tests' , which is derived
> > > from the hidden dirctory ".pybuild" as created by default by "pybuild".
> > > 
> > > I think that the initial "." is used only as a directory name but Python
> > > assumes that is a relative import requiring the package parameter.
> > > 
> > > Just to check my thoughts, and after running dpkg-buildpackage and
> > > failing let's try again:
> > > 
> > > $ cd .pybuild/cpython3_3.9_qtpy/build; python3.9 -m pytest qtpy/tests ; cd -
> > > Fails with the:
> > > 
> > > TypeError: the 'package' argument is required to perform a relative import for '.pybuild.cpython3_3.9_qtpy.build.qtpy.tests'
> > > /home/carles/git/python-qtpy
> > > 
> > > Then let's try to avoid the initial "." confusion:
> > > 
> > > $ mv .pybuild pybuild
> > > $ cd pybuild/cpython3_3.9_qtpy/build; python3.9 -m pytest qtpy/tests ; cd -
> > > 
> > > It works.
> > > 
> > > I don't know why this is the only package affected by this though...
> > > 
> > > Hopefully it helps a bit!
> > > 
> > > On Jul/04/2022, Julian Gilbey wrote:
> > > > Dear all,
> > > > 
> > > > I wonder whether you might have any clue about
> > > > https://bugs.debian.org/1013700
> > > > I have mostly worked out the "cause" of the bug, but I haven't quite
> > > > got to the bottom of it.
> > > > 
> > > > When running the command
> > > > PYTHONPATH=. python3.10 -m pytest qtpy/tests
> > > > in the directory .pybuild/cpython3_3.10_qtpy/build, I get the error
> > > > message:
> > > > 
> > > > ImportError while loading conftest '/home/jdg/debian/spyder-packages/qtpy/build-area/python-qtpy-2.1.0/.pybuild/cpython3_3.10_qtpy/build/qtpy/tests/conftest.py'.
> > > > TypeError: the 'package' argument is required to perform a relative import for '.pybuild.cpython3_3.10_qtpy.build.qtpy.tests'
> > > > 
> > > > If the directory .pybuild is renamed to pybuild, the tests run without
> > > > a problem.  So there seems to be something funny about conftest.py
> > > > (and removing all of the other files from the qtpy/tests directory
> > > > except for the empty __init__.py gives the same error); here's a link
> > > > to it:
> > > > 
> > > > https://salsa.debian.org/python-team/packages/python-qtpy/-/blob/master/qtpy/tests/conftest.py
> > > > 
> > > > But there doesn't seem to be anything out of the ordinary about this.
> > > > So I am mystified: why does pytest 7.x seem to not give this error on
> > > > any other Debian package?
> > > > 
> > > > The only solution I currently have for this package is skip the tests
> > > > at build time and rely on autopkgtest to do them.
> > > > 
> > > > Best wishes,
> > > > 
> > > >    Julian


Reply to: