There are lots of different tools for that, most famously PyInstaller, but a number of other options are mentioned in the recent thread Installer creation based on distributions - #4 by pf_moore (for example, briefcase).
See, for example, Using PyInstaller to Easily Distribute Python Applications – Real Python