Tox: Testing with `--installpkg somewheel.whl` broken (Regression in 3.5.0)

Created on 8 Oct 2018  Â·  11Comments  Â·  Source: tox-dev/tox

Tox 3.5.0 seems to break my Travis tests for Prequ. I have set the Travis configuration so that it runs python setup.py bdist_wheel and then runs as tox -v --installpkg dist/*.whl. This worked fine with earlier Tox versions (<=3.4.0).

With Tox 3.5.0 my Travis job started to break with an exception raised from this line:

https://github.com/tox-dev/tox/blob/5f2535f1a697fe4bfbec571407a742615b410e24/src/tox/package.py#L64

The exception was AttributeError: 'str' object has no attribute 'basename'. Full trace back is available in the build log: https://travis-ci.org/suutari/prequ/jobs/438550460

I think the error happens because acquire_package returns a bare str if --instalpkg is used, but otherwise it seems to return a _path.local.LocalPath instance. The failing code in create_session_view seems to assume (since commit 6538f74fd7) that the package is a a rich Path object rather than bare string.

normal pr-merged

Most helpful comment

All 11 comments

@suutari thanks for pointing this out I'll fix it :+1:

@gaborbernat thanks for the quick fix!

@suutari https://pypi.org/project/tox/3.5.1/ has been released and should address the issue; thanks for the report and let us know if you bump into any other issues!

PyPI
virtualenv-based automation of test activities

@gaborbernat Thanks for the fix!

However, even Tox 3.5.1 doesn't work with my use case yet (as 3.4.0 used to). See https://travis-ci.org/suutari/prequ/jobs/438805462

I guess the problem is that the wheel file is renamed to 1-something.whl, but Pip won't install from a wheel file with that name, since the name of the package doesn't have this 1- prefix. What's the point of this prefix? Can it be removed? Or maybe a directory could be used instead, e.g. 1/something.whl, so that the wheel file name could be in correct format.

https://tox.readthedocs.io/en/latest/changelog.html#features details the goal of adding the hard link. We'll need to change to folder method though indeed, will try to do that tomorrow. If you're available feel free to create a PR doing that.

Please note that the new hard linking approach (package.py:72) breakes if source path and destination path are on different filesystems.

Instead of checking if hasattr(os, 'link'), what about trying to os.link and falling back to copying if an Exception is raised?

In theory, both folders should be within .tox so a very edge case for them to be on a different file system. However, we can be safe by doing so.

Unfortunately it's my use case, since I'm building with Jenkins and then running tox inside a docker container with --installpkg AND --workdir /tmp/...

Tox 3.5.2 seems to fix also the second issue with wheels (which was affecting my testing of Prequ). Thanks @gaborbernat!

Great to hear, you're welcome.

Was this page helpful?
0 / 5 - 0 ratings