¿Cómo crear una aplicación de Mac OS X con Python?

Quiero crear una aplicación GUI que debería funcionar en Windows y Mac. Para esto he elegido Python.

El problema está en Mac OS X.

Existen 2 herramientas para generar un “.app” para Mac: py2app y pyinstaller.

  1. py2app es bastante bueno, pero agrega el código fuente en el paquete. No quiero compartir el código con los usuarios finales.
  2. Pyinstaller genera un ejecutable UNIX, entonces, ¿cómo ejecutarlo en Mac? Creé paquetes con este ejecutable, pero el resultado “.app” no funciona.

Las preguntas son:

  1. ¿Cómo configurar py2app para incluir el código fuente en el ejecutable, para que los usuarios finales no tengan acceso a mi progtwig?
  2. ¿Cómo convertir un ejecutable UNIX a Mac “.app”?
  3. ¿Hay alguna manera de comstackr código Python con GCC?
  4. En Windows es fácil, creé un archivo “exe” a partir del código Python y funciona. ¿Es posible crear un solo archivo “aplicación” para Mac?

PS Yo uso dos computadoras (Windows y para Mac), Python 2.7, wxPython, py2exe, py2app y pyinstaller.

Además, he revisado estos sitios:

  • http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html
  • http://www.pyinstaller.org/export/develop/project/doc/Manual.html?format=raw
  • http://www.pyinstaller.org/wiki/Features/MacOsCompatibility
  • http://www.stackoverflow.com/questions/2933/an-executable-python-app

¿Cómo configurar py2app para incluir el código fuente en el ejecutable, para que los usuarios finales no tengan acceso a mi progtwig?

A menos que hackee seriamente el intérprete de Python (e incluya la versión destrozada), no hay una manera realmente buena de ocultar la fuente a un usuario moderadamente capacitado y determinado. Creo firmemente que esto también es cierto en Windows. Básicamente, ya sea que incluya una fuente verdadera o un código de bytes, se puede recuperar una versión bastante limpia de la fuente. Más importante aún, en mi opinión, a menos que incluya el código fuente real (a diferencia del código de bytes, introducirá una posible dependencia en la versión del intérprete).

¿Cómo convertir un ejecutable UNIX a Mac “.app”?

¿Qué quiere decir con un ejecutable de UNIX? ¿Un binario de Darwin (OS X) [que en realidad no es UNIX]? Esto se puede hacer utilizando los tipos de herramientas que ya mencionó, pero debe hacerse con cuidado para evitar las dependencias de la biblioteca.

Si todo lo que quiere es un contenedor simple para poner un binario de línea de comandos en una ventana, es bastante fácil de lograr y la suite gratuita XCode tiene varios ejemplos que servirían (dependiendo de qué salida desea entregar, si corresponde).

¿Hay alguna manera de comstackr código Python con GCC?

GCC no comstack Python. Es un idioma diferente (aunque existen herramientas en la familia gcc que admiten varios idiomas, pero no Python). Hay herramientas que intentan traducir Python a C, y luego puede comstackrlo en un binario real, pero esto solo funciona para progtwigs que evitan ciertos tipos de construcciones, y el proceso (y las restricciones) también deben aplicar sus bibliotecas.
Un proyecto para permitir esto es Cython. Funciona bien para algunos tipos de código, en su mayoría código numérico, pero no es trivial de instalar y explotar, especialmente si desea producir algo que se ejecute en varios equipos diferentes.

En Windows es fácil, creé un archivo “exe” a partir del código Python y funciona. ¿Es posible crear un solo archivo “aplicación” para Mac?

Debería decir que soy escéptico, muy escéptico, sobre esto. Al igual que en el caso de OS X, es casi seguro que el exe tenga el código fuente accesible trivialmente dentro de él.

Un truco bastante fácil es cifrar el código fuente y luego descifrarlo sobre la marcha, pero esto me parece más problemático de lo que vale.

PyInstaller creará automáticamente paquetes en Mac OSX para ejecutables con ventanas. Cuando ejecute ypinstaller.py, asegúrese de pasar la opción “–windowed”.

Esta característica está documentada en el sitio web de pyinstaller.

Si no estás completamente comprometido con wxPython (y para cualquier otra persona que busque una plataforma de interfaz gráfica de usuario Python multiplataforma), te recomiendo que revises Kivy . Es multiplataforma, GPU acelerada, y hará el empaquetado de la aplicación por usted. Es fácil saltar, tiene una architecture bien pensada y le brinda una increíble flexibilidad en términos de la interfaz. Es la mejor manera que he encontrado para crear una aplicación de interfaz gráfica de usuario Python multiplataforma.

cxFreeze fue la elección. Lo uso para empaquetar mi progtwig python en una aplicación de Mac OS X. Que funciona como un encanto.

Automator ya se mencionó como una solución rápida y simple para los scripts de Pythons que están contenidos en un solo archivo, pero como la interfaz de usuario de Automator tiene muchas opciones, y no es obvio cómo hacerlo en realidad, le daré un paso por paso. Instrucciones paso a paso (verificadas para trabajar en Yosemite):

  1. En Automator, seleccione Archivo > Nuevo y elija Aplicación como tipo de documento.
  2. A continuación, asegúrese de que la pestaña Acciones esté seleccionada a la izquierda y luego, en el cuadro de búsqueda, run tipo. Entre otras opciones, verá Ejecutar el script de shell : haga doble clic en él y aparecerá una ventana del editor en el panel derecho.
  3. Desde el menú desplegable de Shell , seleccione / usr / bin / python .
  4. Pegue su código Python en la ventana de edición y luego seleccione Archivo > Guardar .

De forma predeterminada, la aplicación se guardará en $HOME/Applications y aparecerá en Spotlight.

Si desea poder configurar su propio ícono y tener algunas funciones extravagantes, como íconos de la barra de tareas con un menú, ventanas de registro, etc., consulte Platypus , una aplicación de código abierto para crear paquetes nativos de MacOS.

2: No puede “convertirlo”, pero puede mover el archivo ejecutable a App.app/Contents/MacOS/something en un archivo .app, con CFBundleExecutable configurado a “algo”. Esto generalmente no sería recomendado.

Una persona motivada probablemente podría reconstruir el código fuente utilizable del código de bytes de Python en su aplicación, por lo que podría reconsiderar su oposición a py2app. Si no confía en sus usuarios finales, ¿por qué hace negocios con ellos?

La única forma es py2app. No tienes otra manera. Lo siento. La investigación que hiciste parece muy sólida y no te perdiste nada.

Habiendo usado py2exe para usuarios de Windows para que no tuvieran que lidiar con las versiones de la biblioteca, he desgarrado los progtwigs comstackdos, incluyen los archivos de código de bytes de python. Si bien puede hacer que sea una violación de la licencia mirar dentro de ellos, el hecho es que si una computadora puede ejecutarlos, puedo leerlos. Es posible comstackr progtwigs python con gcc, a través de un preprocesador de C (intente buscar 2c.py en google), no sé si alguno de ellos es compatible con GCC. Nuevamente, no obtiene ninguna seguridad al usarlos, pero puede obtener una mejora significativa en la velocidad.

No lo he probado con grandes proyectos de Python, pero para mis propios scripts, la forma más sencilla que encontré fue usar Automator

Puede crear de forma interactiva un proyecto de aplicación con la acción Ejecutar el script de shell , luego pegar el script en su editor, seleccionar su progtwig de shell (/ usr / bin / python), finalmente guardar el proyecto. Y tienes una aplicación nativa para Mac.

Automator también puede ser manejado por AppleScript. Por lo tanto, puede canalizar este proceso de conversión de la aplicación py-2 a sus scripts de comstackción.

Nunca he probado un progtwig GUI con él, así que no sé si estarás contento con él. Pero lo intentaré, ya que puede que se pregunte qué tan bien se mantienen todos los módulos / aplicaciones de Python de terceros citados y cuánto tiempo durarán. Al venir incluido con OS X, es probable que Automator se quede, a menos que Apple se haya cansado REALMENTE de ello.

cxFreeze es la mejor solución disponible, primero cree su progtwig o aplicación usando python y luego haga un archivo de configuración para su aplicación, y luego python setup.py build la aplicación usando el comando build python setup.py build , de acuerdo con su requerimiento que necesita para hacer algunos cambios.