For question 2, three commands answer nearly everything in this room:
uname -m # what this shell is: arm64 or x86_64
file $(which python3) # what that specific binary contains
file <path-to-the.so> # the library in the error message
file prints something like Mach-O 64-bit bundle x86_64 or arm64, and a universal binary lists both.
The surprise for a lot of people is the first one. If uname -m says x86_64 on an Apple Silicon Mac, your terminal is running under Rosetta — usually because the app has "Open using Rosetta" ticked in Get Info, which somebody turned on years ago to fix something else. Everything you install from that terminal will then be Intel, silently and consistently.
That one checkbox explains an enormous number of these threads.