The macros create a Python wrapper type and attempt to implement a couple of conversion traits between it and the contained Rust type. The problem is that the traits get implemented on the Rust type, which is often foreign to the crate implementing the wrapper, and so errors crop up.
If the traits get reversed to implement on the Python type instead, the orphan rule should no longer apply and things should work correctly.