2011-02-04 119 views
8

¿Puedo crear un programa en Python, lo envía a un equipo remoto, y ejecutarlo allí sin ese equipo que tiene instalado Python? He oído que no puedes, ya que Python necesita ser interpretado. Si esto es cierto, entonces parece muy extraño, ya que sería difícil distribuir su programa a menos que todos decidan instalar Python.¿Se puede ejecutar un programa python en una computadora sin Python? ¿Qué hay de C/C++?

Además, ¿qué pasa con C y C++? ¿Se pueden ejecutar en una computadora remota sin tener el idioma instalado? (Creo que puedes, ya que es un lenguaje compilado).

No estoy del todo seguro y quisiera una aclaración.

EDIT:

Me estoy poniendo algunas respuestas mixtas sobre esto y no estoy seguro de a dónde ir. Veo que puedo incluir la biblioteca de Python en el programa y puedo usar py2exe.

Sin embargo, estoy confundido en C y C++. ¿Debo incluir sus bibliotecas en el programa? ¿Pueden correr solo en ciertas máquinas? ¿El compilador permite que se ejecute en todas las máquinas?

+0

sí, puede agrupar Python como parte del programa: http: //wiki.python.org/moin/Freeze – Anycorn

+1

En las plataformas modernas tenemos administradores de paquetes que se encargan de instalar dependencias (como un intérprete de Python) automáticamente. –

+0

Me gustaría ver una explicación sucinta de cuán imposible es WORA sin VM. – whatnick

Respuesta

9

Mira py2exe y py2app para Windows y Mac. Sin embargo, los Mac que ejecutan OSX y los Linuces más modernos tienen instalado Python.

Las aplicaciones C/C++ normalmente se compilan en ejecutables que funcionan en una arquitectura de máquina/sistema operativo (por ejemplo, Windows de 32 bits o OSX de 64 bits); tal ejecutable puede ejecutarse en algunas pero no en todas las máquinas. Por ejemplo, Windows o OSX de 64 bits pueden ejecutar programas creados para el sabor de 32 bits o de 64 bits de sus sistemas operativos respectivos.

+0

Bien, entonces puedo usar py2exe para distribuir Python. ¿Qué hay de C y C++? Estoy recibiendo respuestas mixtas. ¿Cómo voy a distribuirlo entre cualquier computadora? – Justin

+3

@Justin: "ejecutar en cualquier computadora" no está sucediendo. No todos los procesadores usan el mismo conjunto de instrucciones. Como máximo, una familia de procesadores podrá ejecutar su programa sin necesidad de archivos especiales de soporte de tiempo de ejecución de traducción, y para hacer mucho de lo que sea útil, también necesitará un código específico del sistema operativo. La ejecución en más de un sistema siempre necesitará un ayudante de tiempo de ejecución específico del sistema. –

1

Hay un py2exe que puede producir un archivo ejecutable que se ejecutará en otra computadora sin que ese usuario instale el paquete Python normal.

Sí, C y C++ se implementan (al menos normalmente) como compiladores que pueden producir ejecutables independientes.

Editar: En un caso típico, una C o C++ aplicación enlazarán las funciones de la librería estándar que se utiliza en el programa en el ejecutable. Esto puede incluir (y muchas veces lo hace) bastante que no se usa directamente, pero que normalmente no incluye (en ningún lugar cercano) toda la biblioteca estándar.

En la mayoría de los casos, también puede producir un ejecutable que depende de una implementación de la biblioteca estándar que ya está presente en la máquina de destino en forma de biblioteca compartida, DLL, etc. (diferentes sistemas operativos usan nombres diferentes). Esto reduce el tamaño del ejecutable, pero aumenta los dolores de cabeza implicados en la distribución; Lo uso para el código que estoy compilando en mi propia máquina, pero generalmente lo evito cuando/si distribuyo un ejecutable a alguien más. Teniendo en cuenta los precios actuales de los discos duros, los ahorros en espacio en disco rara vez valen la pena.

+0

Para una definición débil de "independiente" que significa "depende solo de un sistema operativo en particular y un conjunto de bibliotecas compartidas que ya están presentes en la computadora". Y sí, esta es la definición * habitual * de programación independiente en la computadora, solo quería resaltar que es diferente del significado literal en inglés. –

+0

@Ben Voigt: Si vas a ponerte pedante al respecto, todavía tengo que estar en desacuerdo (aunque la declaración original también es incorrecta). El compilador produce solo un archivo de objeto. Depende del enlazador tomar las cosas desde allí, y aunque la mayoría están configurados para producir resultados que dependen de un sistema operativo (etc.) también es posible (al menos en algunos casos) producir resultados realmente independientes (es decir, se ejecutarán como código de arranque). De su pregunta, apunta a Windows ... –

+0

Quizás me aclararías qué dice Windows en la pregunta (¿contra Mac OSX o incluso iPad?) Estoy de acuerdo en que no es probable que sea Linux, donde los usuarios tienen un mejor concepto de especificidad del sistema operativo. Y sí, tienes un punto con compilador vs toolchain. –

2

Si una que haya escrito un programa en cualquier idioma, y ese programa no se compila a código máquina, algo en el ordenador del usuario debe convertirlo a código de máquina antes de que pueda ser ejecutado.

En el caso de JavaScript, ese "algo" es a menudo un navegador web. En el caso de Python, que es a menudo un intérprete autónomo, aunque es posible compilarlo:

Is it feasible to compile Python to machine code?

Sin embargo, para ser claros: sólo porque su programa no se compila a imachine código hace no significa que será interpretado. Los programas escritos en C# generalmente se compilan en MSIL, que se compila para codificar la máquina la primera vez que se ejecuta el programa. Los programas de Java también se compilan cuando se ejecutan por primera vez.

9

python se interpreta, por lo que no se ejecutará sin python. Sin embargo, eso no significa que se deba instalar Python, puede incluir una copia en el directorio de su programa o incluso agrupar su programa y el tiempo de ejecución de python en un único archivo.

compiladores C y C++ toolchains generan código máquina (en la mayoría de los casos, existen intérpretes C, al igual que los compiladores C y C++ -> p-code y bytecode). Pero la mayoría de los programas C y C++ usan bibliotecas compartidas, y no se ejecutarán a menos que la biblioteca compartida esté presente (una vez más, no tiene que instalarse, puede colocarse en el directorio del programa). También suele haber una opción de compilación (enlace estático) para incluir todas las bibliotecas necesarias en el archivo de programa principal.

Pero el resultado todavía está limitado a una combinación particular de arquitectura de sistema operativo y CPU. Hacer que un programa se ejecute en más de una plataforma requiere siempre soporte de tiempo de ejecución específico de la plataforma.

2

Daré una aplicación práctica de envío de código a una máquina remota para ejecutar. Esto normalmente se hace en el proyecto BOINC, una iniciativa de computación GRID de la comunidad que ha producido gemas como SETI @ Home. Las aplicaciones suelen ser compiladas en versiones C++ con binarios multiplataforma para x86-linux, AMD64-linux, win32, win64 y Mac OS Universal Binaries (con ppc, x86 y 64-bit). Esta es una gran variedad de distribución, pero un sistema de marca moderno puede automatizar fácilmente todo eso (por ejemplo, CMake).

Mucha gente prefiere el método WORA (escribir una vez en cualquier lugar) y seguir con el lenguaje basado en VM como Java o Python. En este caso, los proyectos boinc distribuyen una versión de la VM así como el código para ejecutar en ella. Las VM de Java están cargadas de problemas de licencia, Python VM es mucho más agradable. Boinc está intentando embed Python VM en varios clientes BOINC para facilitar la distribución de las aplicaciones GRID basadas en Python.

Espero que esto le dé una idea sobre la distribución de aplicaciones y lo ayude a tomar una decisión informada.

0

Busque en Pyinstaller ejecutables independientes sin necesidad de integración con Python. ¡Bien, aparte de las bibliotecas cruciales para que pueda funcionar!

Se actualizó recientemente, se mantuvo bien e incluso admite la integración con cython, aunque puede ser complejo. Puede comprimir los archivos para que sean más pequeños o si tiene varios ejecutables, puede vincularlos a un archivo para reducir el tamaño.

También puede, por supuesto, crear un único ejecutable con python instalado. No use anaconda (use la versión predeterminada de Python 3.6) para asegurarse de que su programa sea muy pequeño.

Espero que esto ayude.

Cuestiones relacionadas