six.wraps was added in
https://github.com/benjaminp/six/com...1debafb8138484 (in version 1.7.0)
Do you actually need the functionality it is providing (the __wrapped__ attribute)?
More generally, you can guarantee that all versions of calibre come with some version of six.py bundled. Through 2.15.0, six was vendored in calibre itself, after that it was always a required part of the binary install due to being a dependency of dateutil (which calibre directly uses).
calibre 1.48.0 -- 2.15.0: six 1.4.1
calibre 2.16.0 -- 2.85.0: six 1.7.2 # has six.wraps
calibre 3.0.0 -- current: six 1.10.0
If you're going to rely on polyglot, it was first added in 3.32.0, and most of the useful bits were added in 3.41.0 -- so, here is the question: what would you want your minimum supported version of calibre to be? If you're okay dropping Qt4/Windows XP support, you don't need to support 1.48, so at that point there's no reason not to require at least 2.85.
...
When we are ready to start python3 betas, I'll give people a recap of what their options are in terms of backwards-compat, and what utility methods are available for bridging the gap.