En ocasiones necesitamos que un script en Python sea usado por un cliente final, puede ser que este usuario no tenga el intérprete de Python instalado en el sistema o no tenga los conocimientos necesarios para ejecutar el programa desde la terminal o simplemente por comodidad siempre es más fácil hacer doble click en un .exe.
Generar un ejecutable de un script de Python es muy fácil y existen varias librerías capaces de hacerlo, la más famosa es PyInstaller pero deja de sernos útil si usamos librerías que no son del sistema ya que no es capaz de empaquetarlas y el ejecutable no funcionaría. Por eso mismo vamos a hablar de cx_Freeze.
El funcionamiento es más o menos el mismo que PyInstaller, pero la diferencia es que esta sí que permite generar ejecutables que usen librerías de terceros.
Lo primero que tenemos que hacer es instalarla (recomendable hacerlo en el entorno virtual del proyecto con pip):
$ pip install cx_Freeze
Ahora nos vamos a la ruta donde esté nuestro script para generar su ejecutable y ejecutamos el comando:
$ cxfreeze script.py --target-dir dist
Si queremos que se ejecute en segundo plano sin mostar la ventana de la termina, el comando sería el siguiente:
$ cxfreeze script.py --base-name=Win32GUI --target-dir dist
Cuando termine veremos que se ha creado un directorio llamado dist y dentro estará el ejecutable, si nuestro script se llamaba script.py el ejecutable se llamará script.exe. También habrá otros ficheros necesarios para la ejecución:

Configurarlo para que se inicie automáticamente con el sistema
En mi caso, mi programa debe iniciarse automáticamente con el sistema porque tiene que ir buscando contínuamente ficheros en una ruta sin que tenga que intervenir el usuairo. Hacerlo es muy fácil, solo tenemos que pulsar con el botón derecho del ratón sobre el .exe y crearlo como acceso directo en el escritorio:

Ahora desde la ventana ejecutar Tecla Windows+R escribimos: shell:startup

Se nos abrirá una ventana que (si lo hay) contendrá los programas que se ejecutan al inicio de Windows. Movemos ahí el acceso directo que habíamos creado en el escritorio:

Y listo, así de fácil es crear un ejecutable de un script Python que se ejecute al inicio y en segundo plano.