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.
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.