Compile un archivo .pyw para que pueda ejecutarse como .pyc sin consola

Estoy tratando de comstackr un archivo pyw en un pyc sin consola. Cuando bash una comstackción directa con él, el resultado es un archivo pywc, pero parece que pythonw.exe no registra esa extensión como uno de sus archivos, como lo hace python.exe para pyc.

Por supuesto, el resultado es que no tiene un controlador de doble clic cuando intenta ejecutar, o si cambia la extensión a pyc, obtiene la consola.

¿Alguien sabe una manera de evitar este problema? ¿Algo al efecto de un .pyc sin consola?

¡Gracias!

Actualización: desde que ejecuté esto a través de execfile o haciendo doble clic en el ícono de Windows para que no se genere una versión comstackda de este archivo, inicio Python en la línea de comando, luego:

    import py_compile py_compile.compile("[FileName].pyw") 

    Aquí es donde obtengo la extensión .pywc de. Mi versión de Python es 2.5.4

    (siguiendo una pequeña discusión en el post del OP)

    Si lo que necesita es proporcionar a los clientes o usuarios la aplicación comstackda en forma de * .pyc o * .pyo, y evitar abrir la consola en la ejecución, una buena opción es dejar un contenedor * .pyw que llame a la aplicación principal.

    Supongamos que la aplicación principal está en main.pyc , y el punto de entrada main , y llamemos al envoltorio top.pyw , que normalmente se vería como:

     # top.pyw file import main if __name__ == "__main__": import sys main.main(*sys.argv[1:]) 

    Tu archivo main.py se vería así:

     # main.py file """ Main module documentation (optional) """ # import modules # function and class definitions def main(*argv): # Parses the options (optional) import optparse parser = optparse.OptionParser(usage="%prog []\n" + __doc__) parser.add_option(...) parser.add_option(...) opt, args = parser.parse_args(list(argv)) # Calls the appropriate function: my_function(...) 

    Tenga en cuenta también que * .pyc tiende a ser específico de la versión. Puede verificar si la solución anterior sería compatible con pyInstaller y con métodos de distribución “independientes” similares .

    Edit => De hecho, si usa pyInstaller, simplemente puede incluir todos sus scripts y generar un archivo ejecutable que será independiente de la instalación de Python, y comenzará sin consola (opción -w cuando cree las especificaciones). Ni siquiera necesita usar un envoltorio o cambiar sus extensiones. Si bien será un archivo más grande, eso podría ser lo que estabas buscando.

    Finalmente, solo en el caso de que te dirijas: si no quieres que otra persona extraiga el código fuente del código de bytes comstackdo, no olvides que necesitarás precauciones adicionales. Esto se llama ofuscación de código y hay otros subprocesos en SO acerca de eso ( por ejemplo, este ). No dude en publicar una nueva pregunta si solo encuentra respuestas antiguas en esa pregunta, esas cosas pueden cambiar rápidamente.

    Puede usar los comandos FTYPE y ASSOC para asociar archivos .pywc con pythonw.exe.

    ASSOC se utiliza para asociar una extensión con un tipo de archivo, y FTYPE asocia un tipo de archivo con el comando utilizado para abrirlo. Los siguientes comandos muestran las asociaciones existentes en mi máquina:

     C:\Python26>assoc .py .py=Python.File C:\Python26>assoc .pyc .pyc=Python.CompiledFile C:\Python26>assoc .pyw .pyw=Python.NoConFile C:\Python26>assoc .pywc File association not found for extension .pywc 

    Estos comandos muestran a qué progtwigs están asociadas las extensiones a través de sus tipos de archivo:

     C:\Python26>ftype Python.CompiledFile Python.CompiledFile="C:\Python26\python.exe" "%1" %* C:\Python26>ftype Python.NoConFile Python.NoConFile="C:\Python26\pythonw.exe" "%1" %* 

    Así que parece que podrías asociar archivos .pywc con Python.NoConFile como este:

     assoc .pywc=Python.NoConFile 

    El intérprete que lee los archivos .pyw también es capaz de leer un archivo con formato .pyc comstackdo en python. Simplemente cambie el nombre de su archivo .pyw a .pyw . Se ejecutará (aunque seguirá siendo la versión específica), y no obtendrá la consola fea.