Scott,
Found the problem. It's the way duplicity handles the /tmp directory. You can see this yourself with:
$ mkdir /tmp/foo
$ ls -l /tmp
and observe that /tmp/foo user is you, but the group is wheel. On Linux that would be your gid.
What's happening is that duplicity is building a sigtar file in /tmp, then copying it to testing/testfiles/cache, or trying to. As soon as the copy is complete, duplicity tries to chown the sigtar file to the same as the one in /tmp, which is test:wheel and test does not have the rights to set a wheel gid.
$ TMPDIR=~/tmp tox -e py37
works for all tests.
I'm going to have to think about the changes needed, perhaps as simple as telling non-admin users to override TMPDIR.
On the second traceback, that was caused by Pythons poor exception reporting standards. In some cases the args returned are (number, mee ssage), in others (message, number). I tweaked it so it would look for the first string in the tuple and used that for the error message. That's probably wrong in some cases.
...Ken