2012-02-23 6 views
7

¿Es posible implementar aplicaciones python para que no se libere el código fuente y no es necesario asegurarse de que el cliente tenga python instalado?implementando aplicaciones python

Estoy pensando que tal vez haya algún proceso de instalación que pueda ejecutar una aplicación de Python solo con los archivos .pyc y una biblioteca compartida que contenga el intérprete o algo así.

Básicamente estoy interesado en obtener los beneficios de desarrollo de un lenguaje como Python: alta productividad, etc. pero no veo cómo implementarlo profesionalmente en un cliente donde no sabe cómo se configura la máquina y definitivamente no puedes entregar la fuente.

¿Cómo lo hacen las casas de software profesional que se desarrollan en python (o tal vez la respuesta es que no lo hacen)?

+0

PD Soy consciente de py2exe y todo eso, pero parece una solución tipo hack, p. un poco poco elegante tener que compilar en todo el intérprete cada vez que escriba una aplicación – bph

+2

Lea esta pregunta como fuente de inspiración: http://stackoverflow.com/questions/2678180/how-does-dropbox-use-python-on-windows- and-os-x –

+0

¿hay otro lenguaje similar que pueda compilarse en binario nativo? D tal vez? Sería bueno tener un lenguaje con enlaces a un paquete de GUI populares como widgets o qt también – bph

Respuesta

13
  1. a proteger su código fuente legalmente, no tecnológicamente. La distribución de archivos py realmente no es un gran problema. La única solución tecnológica que aquí es no para enviar su programa (que en realidad es cada vez más popular en estos días, ya que se proporciona software a través de Internet en lugar de completamente instalado localmente con más frecuencia.)

  2. Si no desea el usuario debe tener Python instalado pero quiere ejecutar programas de Python, tendrá que agrupar Python. Tu resistencia a hacerlo me parece bastante extraña. Los programas Java tienen que agrupar o anticipar la presencia de la JVM. Los programas C tienen que agrupar o anticipar la presencia de libc (por lo general, el último), etc. No hay nada raro en usar lo que necesita.

  3. El software de escritorio profesional Python incluye Python, ya sea a través de algo como py2exe/cx_Freeze/algo interno que hace lo mismo oa través de la incrustación de Python (en cuyo caso Python aparece como una biblioteca en lugar de como un ejecutable). El primer enfoque suele ser mucho más poderoso y robusto.

+0

no es muy resistente, solo trata de pensar en las opciones, particularmente en lo que es menos problemático para el cliente. al agrupar, ¿quiere decir proporcionarle al cliente un instalador de Python para su plataforma y decirles que lo instale antes de ejecutar nuestro código? – bph

+0

hay instancias en las que debe tener cuidado con la protección de la fuente desde un punto de vista tecnológico, p. sector de defensa – bph

+0

@Hiett, No, no quiero que el usuario instale el stock de Python y luego instale su programa. A menos que su producto se use principalmente como una biblioteca de Python, eso no tendría sentido. No estoy seguro de por qué pensaste que tenía la intención de hacer algo más que hacer que el usuario pasara por el proceso de instalación normal de su plataforma (solo una vez). –

1

Cree una aplicación web en python. Entonces el mundo puede usarlo a través de un navegador con cero instalación.

+0

no estamos desarrollando aplicaciones web, si tan solo fuera tan fácil – bph

+0

@Hiett: más y más de lo que solía ser posible solo como El software "de escritorio" ahora está disponible como software web. ¿Estás * seguro * de que lo que estás haciendo no se puede hacer como una aplicación web? –

+0

LOL ... ¿Cuántas personas piensan que solo hay un cliente? Si desarrolla una aplicación web (o cualquier aplicación del lado del servidor) en Python, y desea venderla, y no desea liberar todo el código fuente, ¿qué ¿lo haces? Escribir otra aplicación web (servidor)? C'mon ... –

3

Bueno, depende de lo que quieras hacer. Si por "no liberar el código fuente" quiere decir "el cliente no debería poder acceder al código fuente de ninguna manera", bueno, está librando una batalla perdida. Incluso los programas escritos en C pueden ser de ingeniería inversa, después de todo. Si tienes miedo de que alguien te robe, haz que firme un contrato y que lo demande si hay problemas.

Pero si quiere decir que "el cliente no debería preocuparse por los archivos Python, y no puede acceder casualmente a ellos", puede usar una solución como cx_Freeze para convertir su aplicación Python en un ejecutable.

6

Sí, es posible hacer paquetes de instalación. Busque py2exe, cx_freeze y otros.

No, no es posible mantener el código fuente completamente seguro. Siempre hay formas de descompilar.
El código fuente original se puede obtener trivialmente de los archivos .pyc si alguien quiere hacerlo. La ofuscación del código haría más difícil hacer algo con el código.

3

me sorprende que nadie ha mencionado esto antes, pero Cython parece una solución viable a este problema.Tomará su código Python y transpile en código C compatible con CPython. También obtienes un pequeño aumento de velocidad (~ 25%, lo último que revisé), ya que se compilará en código máquina nativo en lugar de solo código de bytes Python. Todavía debe asegurarse de que el usuario tenga Python instalado (ya sea convirtiéndolo en un requisito previo que el usuario debe manejar o compilando como parte del proceso del instalador). Además, necesitas tener al menos una pequeña parte de tu aplicación en Python puro: el gancho en la función principal.

por lo que tendría algo básico como esto:

import cython_compiled_module 

if __name__ == '__main__': 
    cython_compiled_module.main() 

Pero esto no hay fugas de manera efectiva los detalles de implementación. Creo que el uso de Cython debe cumplir con los criterios de la pregunta, pero también presenta la complejidad adicional de compilar en C, que pierde parte de la naturaleza fácil de multiplataforma de Python. Si eso vale la pena o no depende de usted.

Como han indicado otros, incluso el código C compilado resultante podría descompilarse con un poco de esfuerzo, pero es probable que esté mucho más cerca del tipo de ofuscación que inicialmente estabas esperando.

Cuestiones relacionadas