create - ¿Cómo crear una aplicación Mac OS X con Python?
py2app (11)
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.
Hay 2 herramientas para generar una ".app" para Mac: py2app y pyinstaller.
- py2app es bastante bueno, pero agrega el código fuente en el paquete. No quiero compartir el código con los usuarios finales.
- Pyinstaller genera el ejecutable UNIX, entonces, ¿cómo ejecutarlo en Mac? Creé un paquete con este ejecutable, pero el resultado ".app" no funciona.
Las preguntas son:
- ¿Cómo configurar py2app para incluir el código fuente en el archivo ejecutable, para que los usuarios finales no tengan acceso a mi programa?
- Cómo convertir el ejecutable de UNIX a Mac ".app"?
- ¿Hay alguna manera de compilar el código de Python con GCC?
- En Windows es fácil, creé un archivo "exe" a partir del código de Python y funciona. ¿Es posible crear una única "aplicación" de archivos para Mac?
PD. Uso dos computadoras (Windows y para Mac), Python 2.7, wxPython, py2exe, py2app y pyinstaller.
Además, he revisado estos sitios:
¿Cómo configurar py2app para incluir el código fuente en el archivo ejecutable, para que los usuarios finales no tengan acceso a mi programa?
A menos que realmente piratee el intérprete de Python (e incluya la versión desfigurada), no hay una buena manera de ocultar el origen a un usuario moderadamente habilidoso y determinado. Creo firmemente que esto también es cierto en Windows. Básicamente, ya sea que incluya fuente verdadera o bytecode, 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 de bytecode, introducirá una posible dependencia en la versión del intérprete).
Cómo convertir el ejecutable de UNIX a Mac ".app"?
¿Qué quieres decir con un ejecutable de UNIX? ¿Un binario Darwin (OS X) [que no es realmente UNIX]? Eso se puede hacer utilizando los tipos de herramientas que ya mencionó, pero debe hacerse con cuidado para evitar dependencias de la biblioteca.
Si todo lo que quiere es un envoltorio simple para poner un binario de línea de comando en una ventana, es bastante fácil de lograr y el conjunto de XCode gratuito tiene varios ejemplos que servirían (dependiendo de qué producto desea entregar, si lo hay).
¿Hay alguna manera de compilar el código de Python con GCC?
GCC no compila Python. Es un lenguaje diferente (aunque hay herramientas en la familia de gcc que admiten front-ends de múltiples idiomas, pero no Python). Hay herramientas que intentan traducir Python a C, y luego puedes compilarlo en un binario verdadero, pero esto solo funciona para programas que evitan ciertos tipos de construcción, y el proceso (y las restricciones) necesitan aplicar también tus bibliotecas.
Un proyecto para permitir esto es Cython. Funciona bien para algunos tipos de código, principalmente código numérico, pero no es trivial de instalar y explotar, muy especialmente si desea producir algo que se ejecute en múltiples computadoras diferentes.
En Windows es fácil, creé un archivo "exe" a partir del código de Python y funciona. ¿Es posible crear una única "aplicación" de archivos para Mac?
Tendría que decir que soy escéptico, muy escéptico sobre esto. Al igual que el caso de OS X, el exe casi con certeza tiene el código fuente trivialmente accesible 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.
Automator ya se mencionó como una solución rápida y sencilla para las secuencias de comandos de Python que están contenidas en un solo archivo, pero como la interfaz de usuario de Automator tiene tantas opciones, y no es obvio cómo hacerlo, proporcionaré paso a paso. instrucciones de paso (verificadas para trabajar en Yosemite):
- En Automator, seleccione Archivo > Nuevo y elija Aplicación como tipo de documento.
- A continuación, asegúrese de que la pestaña Acciones esté seleccionada a la izquierda y luego, en el cuadro de búsqueda, escriba
run
. Entre otras opciones, verá Ejecutar script de shell : haga doble clic en él y aparecerá una ventana del editor en el panel derecho. - En el menú desplegable de Shell , seleccione / usr / bin / python .
- Pegue su código de Python en la ventana de edición y luego elija 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 características sofisticadas, como iconos de la barra de tareas con un menú, ventanas de registro, etc., eche un vistazo a Platypus y la aplicación de open-source para crear paquetes nativos de MacOS.
Ciertamente no soy un experto en la distribución de Python, pero ocasionalmente escribo un código que necesito para ser utilizado por usuarios que no sean Python. El método que uso se describe aquí en mi blog:
http://www.nooganeer.com/his/tipsandtricks/distributing-python-application-osx/
Habiendo utilizado py2exe para los usuarios de Windows para que no tengan que lidiar con las versiones de la biblioteca, he destruido los programas compilados, que incluyen los archivos de bytecode 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 compilar programas python con gcc, a través de un preprocesador C (intente buscar 2c.py en google), no sé si alguno de ellos admite GCC. Nuevamente, no obtiene ninguna seguridad al usarlos, pero puede obtener una mejora de velocidad significativa.
La única forma es py2app. No tienes otra forma. Lo siento. La investigación que hiciste parece muy sólida y no te perdiste nada.
No lo he intentado con grandes proyectos de Python, pero para mis propios scripts, la forma más fácil que encontré fue usar Automator
Puede crear de forma interactiva un proyecto de aplicación con la acción Ejecutar script de shell , luego pegue el script en su editor, seleccione su programa de shell (/ usr / bin / python) y finalmente guarde el proyecto. Y usted mismo tiene una aplicación nativa de Mac.
Automator también puede ser manejado por AppleScript. De modo que puede canalizar este proceso de conversión de py-2-app a sus scripts de compilación.
Nunca he probado un programa de GUI con él, así que no sé si estarás contento con él. Pero lo probaría, ya que puede preguntarse qué tan bien se mantienen todos los módulos / aplicaciones de python de terceros citados, y cuánto tiempo durarán. Viene incluido con OS X, es probable que Automator se quede, a menos que Apple se haya cansado REALMENTE.
PyInstaller creará automáticamente paquetes bajo Mac OSX para ejecutables en ventanas. Cuando ejecute ypinstaller.py, asegúrese de pasar la opción "--windowed".
Esta función está documentada en el sitio web de pyinstaller
Si no está completamente comprometido con wxPython (y para cualquier otra persona que esté buscando un marco de GUI de Python multiplataforma), le recomiendo que consulte Kivy . Es multiplataforma, GPU acelerado, y hará el empaque de la aplicación para usted. Es fácil de abordar, tiene una arquitectura bien pensada y ofrece una increíble flexibilidad en términos de interfaz. Es la mejor manera que he encontrado para hacer una aplicación GUI de Python multiplataforma.
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ías en tus usuarios finales, ¿por qué haces negocios con ellos?
2: No puede "convertirlo", pero puede mover el ejecutable a App.app/Contents/MacOS/something
en un archivo .app, con CFBundleExecutable
establecido en "algo". Esto generalmente no sería recomendado.
cxFreeze fue la elección. Lo uso empaque mi programa python en una aplicación Mac OS X. Que funciona como un encanto.