python python-3.x pyqt pyqt5 setup.py

python - ¿Puedo usar setup.py para empacar una aplicación que requiera PyQt5?



python-3.x (1)

¿Puedo requerir PyQt5 a través de setup.py?

En una palabra, , siempre y cuando restrinja su soporte a PyQt5 y Python3.

Los requisitos especificados en setup.py generalmente se proporcionan solicitando paquetes del Python Package Index (PyPi). Hasta hace poco, estos paquetes eran solo fuente, lo que significa que una instalación que depende de PyQt5 solo funcionaría en un sistema en el que fuera posible construirlo desde la fuente. La construcción de Windows en particular requiere una gran cantidad de configuración, y esto pondría su aplicación fuera del alcance de cualquiera que no pueda o no quiera hacer esto.

Nota: Hasta donde yo sé, en realidad nunca fue posible construir desde la fuente a través de PyPi. El enfoque estándar fue descargar la fuente / binarios de Riverbank Software y construir / instalar desde allí.

Este problema fue resuelto con la introducción de Python Wheels, que proporciona un medio para instalar paquetes de extensión C sin la necesidad de compilación en el sistema de destino. Esto se logra mediante archivos .whl específicos de la .whl . Wheels para PyQt5 en Python3 están disponibles en PyPi para múltiples plataformas, incluyendo MacOS X, Linux (cualquiera), Win32 y Win64, que deberían cubrir la mayoría de los usos.

Por ejemplo, este es el resultado de la instalación de PyQt5 en Python3 en una Mac:

mfitzp@MacBook-Air ~ $ pip3 install pyqt5 Collecting pyqt5 Downloading PyQt5-5.6-cp35-cp35m-macosx_10_6_intel.whl (73.2MB) 100% |████████████████████████████████| 73.2MB 2.5kB/s Collecting sip (from pyqt5) Downloading sip-4.18-cp35-cp35m-macosx_10_6_intel.whl (46kB) 100% |████████████████████████████████| 49kB 1.8MB/s Installing collected packages: sip, pyqt5 Successfully installed pyqt5-5.6 sip-4.18

Para configurar PyQt5 como una dependencia de su propio paquete, simplemente especifíquelo como normal en su setup.py ej. setup.py install_requires=[''PyQt5'']

¿Cuál es la forma correcta de distribuir una aplicación GUI de Python?

Aquí tienes algunas opciones. Lo anterior significa que cualquiera con Python3 instalado ahora puede instalar su aplicación usando pip . Sin embargo, esto supone que el usuario final tiene Python y sabe qué es el pip . Si está buscando distribuir su aplicación con un instalador de Windows, un paquete de ''aplicaciones'' de MacOSX o un paquete de Linux, necesitará usar una de las herramientas dedicadas a tal fin.

Windows

  • cx_Freeze es un paquete multiplataforma que puede empaquetar aplicaciones de Python para Windows, Mac y Linux. Funciona analizando su proyecto y congelando los paquetes y subpaquetes necesarios. El éxito depende en gran medida de qué paquetes depende y su complejidad / corrección.
  • PyInstaller es otro paquete multiplataforma que puede empaquetar aplicaciones de Python para Windows, Mac y Linux. Esto funciona de manera similar a cx_Freeze y probablemente funcionará mejor / peor dependiendo de los paquetes.
  • PyNSISt construye paquetes de instalador de NSIS para Windows. Esto tiene la ventaja de ser muy sencillo: simplemente empaqueta todos los archivos como están, sin ''congelar''. La desventaja es que los paquetes pueden terminar siendo muy grandes y más lentos de instalar (pero vea las opciones de filtro de archivos). Ahora es compatible con la agrupación de archivos .whl que resolverá esto en muchos casos. Con mucho, lo más sencillo es orientar solo a Windows.

Mac OS X

  • cx_Freeze ver arriba.
  • PyInstaller ver arriba.
  • Py2app crea paquetes .app partir de la definición en su setup.py . Una gran ventaja son los controladores personalizados que le permiten ajustar el embalaje de los paquetes problemáticos. Si solo apuntas a MacOSX, esta es probablemente tu mejor opción.

Linux

Nota: Es posible escribir un setup.py muy complejo que le permita compilar usando una o más herramientas en diferentes plataformas, pero generalmente he terminado almacenando configuraciones separadas (por ej. setup-py2app.py ) para mayor claridad.

Miré esta pregunta aquí:

¿Es posible requerir PyQt desde setuptools setup.py?

¿Cuál es la forma correcta de distribuir una aplicación de Python que tiene una interfaz gráfica de usuario y está basada en PyQt? (Estoy usando PyQt5 y Python3)

Todavía estoy aprendiendo a distribuir cosas, así que no sé si mi pregunta tiene sentido.

Editar:

La respuesta es correcta, sudo pip3 install . funcionó para mí para mi propio archivo setup.py , pero aparentemente pyqt5 no incluye el módulo QtWebKitWidgets, y no está disponible para su instalación en un paquete separado en pip3. Así que ahora estoy pensando en alejarme completamente de Python e ir con Javascript + Electron como un lenguaje fácil de ejecutar para el desarrollo.