Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Candidatos
      Candidatos altamente calificados en 48h.
    • Evaluaciones
      500+ pruebas técnicas y psicológicas, más sistema anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Paga en 15+ países de LATAM sin crear entidad local.
  • Precios
  • Empleos

0

554
Vistas
¿Cómo crear una aplicación para mac os a partir de un script de python con una interfaz gráfica de usuario de PySide2?

Contexto:

Estoy desarrollando una aplicación Python simple usando una GUI PySide2. Actualmente funciona bien en Windows, Linux y Mac. En Windows, podría usar PyInstaller e InnoSetup para crear un instalador simple. Luego traté de hacer lo mismo en Mac. Pronto se estropeó porque el sistema se negó a iniciar el comando o la aplicación generada por PyInstaller porque no estaba correctamente firmada. Y como no soy desarrollador de apple, no puedo firmar nada...

Después de investigar un poco, probé py2app. Puedo ir un paso más allá aquí. Con

 python setup.py py2app -A

Puedo crear una aplicación ejecutable. Que obviamente no se puede portar a un sistema diferente porque usa mis carpetas de desarrollo. Y si uso python setup.py py2app el programa generado no puede iniciarse porque py2app no copió todas las cosas requeridas de Qt. Intenté agregar una por una las bibliotecas que faltaban, pero al final el sistema no pudo encontrar los complementos y me di por vencido...

Pregunta:

¿Puede alguien ayudarme con una receta para convertir un script o paquete de python usando una GUI de Qt en una aplicación portátil en Mac? Idealmente, la receta debería decir cómo usar un ícono de aplicación personalizado, pero esto no es obligatorio.

Referencias:

  • Pitón 3.8.5
  • macOS 10.15.7 Catalina
  • PySide2 5.15.1
  • PyInstaller 4.0
  • py2app 0.22

Como mi paquete real es demasiado grande para una pregunta SO, lo reduje a un ejemplo reproducible mínimo:

 from PySide3.QtWidgets import * import sys class MainWindow(QMainWindow): def __init__(self): super().__init__() hello = QLabel('Hello', self) hello.move(50, 50) def run(args): app = QApplication(args) main = MainWindow() main.show() sys.exit(app.exec_()) if __name__ == '__main__': run(sys.argv)

Y aquí está el archivo setup.py usado para py2app:

 from setuptools import setup APP = ['app.py'] DATA_FILES = [] OPTIONS = {} setup( app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, setup_requires=['py2app'], )
over 4 years ago · Hanz Gallego
6 Respuestas
Responde la pregunta

0

Creo que lo que te estás perdiendo es la inclusión de Python3 Framework en tu paquete de aplicaciones. Recientemente, desarrollé una aplicación macOS simple, sin embargo, quería tener un poco más de información sobre cómo hacerlo, así que investigué un poco en la estructura real de una aplicación. Básicamente, vas a poner todo en una carpeta normal con el nombre de tu aplicación. Llame a esta carpeta MyApp . Dentro de esta carpeta tendremos otra llamada Contents . Según tengo entendido, py2app solo toma todas las cosas que componen su aplicación y las estructura dentro de esta carpeta y crea un archivo Info.plist , que también va dentro de Contents . Hasta ahora, esto es lo que tienes:

MyApp

-> Contents

-> -> Info.plist

Además del archivo Info.plist con todas las propiedades necesarias, en su carpeta Contents tendrá una carpeta MacOS y una carpeta Resources como mínimo. Su problema es que también necesita una carpeta de Frameworks , donde agregaría la versión requerida de Python.

Ahora, la jerarquía de su aplicación debería verse así:

MyApp

-> Contents

-> -> Info.plist

-> -> MacOS

-> -> Resources

-> -> Frameworks

En la carpeta Frameworks , puede colocar el marco completo de Python 3 con el que está trabajando para crear la aplicación, así como cualquier paquete de sitio que necesite para ejecutar la aplicación, y luego puede reflejar todos esos cambios en el ejecutable. para que esté apuntando a las instalaciones correctas.

Según tengo entendido, todo lo que se necesita para que la aplicación funcione en MacOS es asegurarse de que su ejecutable principal esté ubicado en la carpeta de MacOS y apunte a Python ubicado en su carpeta de Frameworks , su archivo de ícono .icns esté ubicado en la carpeta de Resources , y su archivo Info.plist está construido.

Para que MacOS lo reconozca como una aplicación completa, creo que posiblemente necesite usar productbuild e incluir un certificado de licencia de desarrollador, pero en realidad solo es necesario si desea que la aplicación se distribuya. De lo contrario, acabo de agregar la extensión .app a MyApp , que la convierte en una aplicación.

Sin la licencia/certificado mencionado anteriormente, probablemente no reconocerá que debe encontrar su archivo de icono y agregarlo, por lo que si lo abre en Vista previa, selecciona todo y lo copia, debería poder hacerlo correctamente. haga clic en la aplicación, presione 'Obtener información' y pegue el ícono encima del ícono actual en la ventana para que se muestre correctamente.

EDITAR: Mis recursos para aprender a crear aplicaciones para macOS:

Estructura del paquete

Incluye marcos

Firmando su solicitud

productbuild

over 4 years ago · Hanz Gallego Denunciar

0

Creo que la solución a su problema se puede encontrar aquí . Primero, cree un entorno virtual e instale todos los módulos en el mismo entorno virtual.

 mkvirtualenv --python="PATH/TO/PYTHON3.6.5/python.exe" venv

Instalar marco Qt

 # Install qt via homebrew brew install qt # Switch to version 5.11.1 brew switch qt 5.11.1 # Do this to link qmake with qt brew link qt5 --force

Luego, instale el PySide2

 git clone --recursive https://code.qt.io/pyside/pyside-setup

Después,

 cd pyside-setup && git checkout 5.11

Cree e instale PySide2 y asegúrese de configurar la ruta de QMAKE que viene con la instalación de Qt

 #To get the path which qmake # Make sure that your virtual environment is activated # Build PySide2 from source python setup.py install --qmake=<PATH/TO/QMAKE> --build-tests --ignore-git --jobs=8 # Install PySide2 python setup.py build --qmake=/path/to/qmake --build-tests --ignore-git --jobs=8

Actualizar

Primero, asegúrese de ejecutar su código en el mismo entorno virtual y, para convertirlo en una aplicación estándar de Mac OS, puede usar py2app o pyinstaller . Además, intente degradar su py2app si no funciona con su versión actual después de seguir el mismo proceso.

 sudo easy_install py2app #or pip install -U git+https://github.com/metachris/py2app.git@master

Crear setup.py

 py2applet --make-setup app.py Wrote setup.py

y tienes que crear un archivo de configuración o ver este ejemplo e incluir cualquier archivo que tengas

 from setuptools import setup APP = ['app.py'] DATA_FILES = [] OPTIONS = { 'argv_emulation': True, 'iconfile': 'app.icns' } setup( app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, setup_requires=['py2app'], )

Para construir el uso de la aplicación

 python setup.py py2app -A

Para ejecutar la aplicación, debe usar esta manera

 ./dist/app.app/Contents/MacOS/app

Si funciona con python setup.py py2app -A , eso significa que todo va bien y debe usar

 rm -rf build dist python setup.py py2app

Si algo sale mal , consulte estas referencias 1 , 2 y 3 . Además, existen formas alternativas de convertir su aplicación a os.

Después de leer su comentario, traté de ver cuál es el problema y encontré esto y puede resolver el problema o puede usar herramientas alternativas como bbFreeze , pyInstaller o cx_Freeze

over 4 years ago · Hanz Gallego Denunciar

0

He creado aplicaciones con éxito usando fbs . Está destinado a crear aplicaciones Python+PyQt5 (también puede usar PySide2) y también debería funcionar en Mac OS (según la documentación/tutorial).

Al usar PyInstaller, fallaba muy a menudo al incluir las dependencias de PyQt5 (especialmente cuando estaba trabajando con pyqtgraph ), pero con fbs funciona muy bien.

over 4 years ago · Hanz Gallego Denunciar

0

Si desea empaquetar para OSX, debe

Crear un grifo de cerveza

Esto probablemente tenga más sentido para un desarrollador de código abierto.

Instrucciones generales https://docs.brew.sh/How-to-Create-and-Maintain-a-Tap

  • aloja tu código en git (no es necesario que sea GitHub)
  • crear una fórmula ( libro de recetas de fórmulas )
  • bifurcación homebrew-core en GitHub
  • agregue su fórmula y cree una solicitud de incorporación de cambios para incluirla en el repositorio principal
  • admitir su solicitud de extracción de modo que se complete

Únase al programa de desarrolladores de Apple

Esto probablemente tenga más sentido para un desarrollador de código cerrado.

Descripción general: https://developer.apple.com/programs/how-it-works/

Este programa cuesta 99 USD al año, pero le permitirá firmar su paquete/binario final y distribuirlo usted mismo o en su App Store.

Después de crear su cuenta, aquí hay una guía para empaquetar y firmar para OSX https://developer.apple.com/forums/thread/128166

  • estructure su código para que sea compatible con la firma (agregue un paso de compilación para copiar su trabajo en una ruta limpia para evitar frustrantes reelaboraciones)
  • % codesign -s <Developer ID Application signing identity> /path/to/code
  • elija un formato de almacenamiento ( .zip , .dmg , .pkg ) y empaquete su aplicación tal como está
over 4 years ago · Hanz Gallego Denunciar

0

Requisitos

  • funciona con Python 3.8.5
  • macOS 10.15.7 Catalina
  • usa PySide2 y py2app

Problemas

  • PySide2 debe agregarse en OPCIONES a la lista de paquetes
  • cuando se ejecuta la aplicación, todavía se produce un error: Library not loaded: @rpath/libshiboken2.abi3.5.15.dylib, Reason: image not found

Solución

El setup.py ligeramente modificado podría verse así:

 from setuptools import setup APP = ['app.py'] DATA_FILES = [] OPTIONS = { 'packages': ['PySide2'], 'iconfile': 'some_icon.icns', 'plist': { 'CFBundleDevelopmentRegion': 'English', 'CFBundleIdentifier': "com.ballesta.xxx", 'CFBundleVersion': "1.0.0", 'NSHumanReadableCopyright': u"Copyright © 2020, Serge Ballesta, All Rights Reserved" } } setup( app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, setup_requires=['py2app'], )

Además, se han agregado una definición de icono y algunas entradas de plist para obtener información básica.

La compilación completa se activa mejor con un script que podría verse así:

 #!/bin/sh python3 -m venv venv . venv/bin/activate pip install PySide2 pip install py2app python setup.py py2app cp ./venv/lib/python3.8/site-packages/shiboken2/libshiboken2.abi3.5.15.dylib ./dist/app.app/Contents/Resources/lib/python3.8/lib-dynload/shiboken2

Prueba

Aquí la captura de pantalla de una prueba:

captura de pantalla

over 4 years ago · Hanz Gallego Denunciar

0

Después de jugar mucho con las diferentes opciones para crear un paquete de macOS para una aplicación PySide2, encontré que los siguientes pasos funcionan prácticamente desde el primer momento.

Esta receta que usa pyinstaller para crear un paquete de aplicaciones de macOS se probó con Python 3.9.1, PySide2 5.15.2, pyinstaller 4.2 en macOS Catalina 10.15.7.

  • Instale pyenv y la última versión de Python con compatibilidad con Framework (consulte Pyenv , Cómo administrar varias versiones de Python y entornos virtuales para obtener una introducción general sobre cómo funciona pyenv):

     brew install pyenv PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.9.1
  • Cree una carpeta para el ejemplo, cree una aplicación pyside de ejemplo:

     mkdir hello && cd hello nano hello.py

    hola.py:

     import sys from PySide2.QtCore import * from PySide2.QtGui import * from PySide2.QtWidgets import * class MainWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.setWindowTitle("Hello World") self.button = QPushButton("Click me") self.button.clicked.connect(self.say_hello) self.setCentralWidget(self.button) @Slot() def say_hello(self, url): self.button.setText("Hello!") if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_())
  • Cree un venv para el proyecto, instale los paquetes de python:

     pyenv local 3.9.1 python3 -m venv venv source venv/bin/activate pip install pip pyside2 pyinstaller --upgrade
  • Intente ejecutar la aplicación usando el intérprete de python:

     python3 hello.py
  • Cree un paquete de aplicaciones macos:

     pyinstaller --windowed hello.py
  • Ejecute la aplicación usando el paquete de aplicaciones:

     open dist/hello.app
  • Consulte el hello.spec generado para la configuración de compilación, vuelva a compilar la aplicación con pyinstaller hello.spec .

over 4 years ago · Hanz Gallego Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda