The problem was never your code, really, it was the dependencies.
Wasn't that hard for quite a while to find situations where dependency A was Py3 compatible and B was not (and the incompatibility went both ways, especially in early 3.x releases, you could NOT have one codebase that worked with both).
Sometimes A dropped Py2 support before B gained Py3.
Pain pain pain.
Then add the increasing level of insanity as the answer to "python packaging sucks" was repeatedly to add yet another layer.