Python is (infamously) really not a compiled language but an interpreted one. One notable caveat to this is that the Python interpreter will cache modules with .pyc
files. Here is a more comprehensive summary of those modules. Of course if you're using py2exe, PyInstaller, or some other ad-hoc compiler then its possible that freezing the package as an executable will make it fragile to version changes.
Generally though, in between similar versions (e.g. 3.6 to 3.8) the changes to the standard library are small. If your package (or its dependencies) use some feature that has changed then you can expect it to no longer work and you'll need to update that part of your code. This is the changelog comparing features from 3.6 to 3.7 and the list of backwards incompatible changes is short:
- async and await are now reserved keywords.
This is the changelog comparing 3.7 to 3.8 and it has some more subtle differences.