Pythonturtle: Cree paquetes de instalación automáticamente

Creado en 23 sept. 2018  ·  31Comentarios  ·  Fuente: PythonTurtle/PythonTurtle

Siguiendo los problemas https://github.com/cool-RR/PythonTurtle/pull/105#issuecomment -421965482, # 106 y # 90, me gustaría comenzar a recopilar información sobre cómo (mejor) hacer el empaquetado para todos plataformas en las que se ejecuta PythonTurtle. Cuando sepamos cómo realizar el empaquetado manualmente será una tarea fácil automatizarlo todo.

En otras palabras, necesitamos

  1. una lista de tipos de paquetes de
  2. una lista completa de pasos concretos y detallados ( lea: comandos de shell) de cómo se construye cada tipo de paquete, desde el código fuente que vive en el control de fuente únicamente.

NOTA: Si escribir esto en este número resulta incómodo, es posible que deseemos usar la Wiki del

automation

Comentario más útil

La siguiente gran cosa después de obtener EXE para Windows y los paquetes para macOS en funcionamiento podría ser la creación de una AppImage para Linux. Esto es algo similar a un archivo .dmg en una Mac. ¡Sería una solución única para todas las distribuciones GNU / Linux! : tada:: smiley:

AppImage también tiene (algo) una AppStore, denominada AppImageHub . Y la comparación te hace entender que es algo realmente genial. : +1:

Todos 31 comentarios

Actualmente, parece que usamos py2exe y py2app para Windows y macOS.

Según una charla reciente en PyCon Otto , deberíamos cambiar a PyInstaller , que permite crear ejecutables independientes para Windows, macOS y GNU / Linux por igual.

Estoy de acuerdo en que definitivamente deberíamos usar PyInstaller en lugar de py2exe y py2app.

Y estoy de acuerdo en que necesitamos un proceso de construcción confiable y automático.

Tampoco debemos olvidarnos de crear el paquete PythonTurtle Python y

También sugeriría activar lanzamientos enviando una etiqueta de Git (con el número de versión) al repositorio de GitHub. Los instaladores se pueden descargar a través de la página de lanzamiento . Espero que todo sea posible sin problemas.

Estoy de acuerdo, aunque ese tipo de automatización es un objetivo un poco alto, si llegamos al punto en el que pudiéramos hacer un lanzamiento, estaría extasiado.

si llegamos al punto en el que pudiéramos hacer un lanzamiento, estaría extasiado.

¡Entonces prepara tu traje espacial! :sonrisa:

Como se sospechaba, PyInstaller deberá ejecutarse en la infraestructura para la que debería compilar el instalador (por ejemplo, en Windows para un instalador de Windows, en una Mac para un instalador de macOS).

No tengo ni Windows ni Mac. Por lo tanto, necesito hacer el engorroso descubrimiento de cómo se realiza la construcción en AppVeyor. Además, necesitamos un macOS con Python 3 instalado (y cruza los dedos porque la documentación solo está desactualizada y también podemos compilar con Python 3).

Probablemente sea mejor comenzar automatizando la construcción de un paquete de Python (y subirlo a PyPI automáticamente). IIUC, de todos modos, se necesita un setup.py para construir con (algunas características de) PyInstaller.
Ya tendremos una forma posible de instalar PythonTurtle de esta manera.

¿Quieres agregarme como mantenedor al proyecto PyPI ? Me resultaría más fácil automatizar las cosas cuando puedo usar mis propias credenciales. Mi nombre de usuario es "bittner", como era de esperar.

Te agregué como mantenedor en PyPI.

Con respecto a PyInstaller, me pregunto si una máquina virtual con ReactOS funcionaría para generar un instalador de Windows.

Para hacer que pip install PythonTurtle instale el programa y todas las dependencias necesarias resulta ser difícil:

Conclusiones:

  • _Podríamos_ agregar install_requires=['wxPython'] a setup() , pero esto fallaría a menos que los prerrequisitos ( mencionados en el README ) ya estuvieran instalados. Es posible que podamos detectar el error muy técnico e imprimir una sugerencia útil en caso de que falle la instalación.
  • Como alternativa, podemos confiar en que los usuarios realizarán los pasos de instalación en el archivo README y dejar que PythonTurtle imprima un _reminder_ amigable cuando el módulo wx no se pueda importar ( ModuleNotFoundError en el módulo de la aplicación ).

Hacerlo de una manera fácil de usar "prerrequisitos de detección automática" usando platform.release() y / o os.name sería posible pero también bastante engorroso. Sugiero que simplemente imprimamos un mensaje de texto y consultemos la sección de instalación del archivo README con una URL.

Me pregunto si una máquina virtual con ReactOS funcionaría para generar un instalador de Windows.

No estoy seguro de cómo usaríamos una máquina virtual en un servicio en la nube que construiría el paquete PythonTurtle de forma automatizada. ¿Puedes elaborar? (¿Tiene la intención de usarlo localmente en una máquina de desarrollo únicamente?)

Tienes razón, no lo pensé bien.

Supongo que hay 2 preguntas:

  1. ¿ReactOS podría funcionar para generar un instalador de Windows usando PyInstaller?

  2. ¿Podríamos configurarlo para que funcione automáticamente en la nube?

Digamos que la respuesta a la primera pregunta es sí, y no hay un proveedor de SaaS que brinde ese servicio. Luego digamos que podemos configurar una imagen de Docker que ejecute VirtualBox con un invitado de ReactOS. ¿Quizás podamos encontrar un proveedor de SaaS que ejecute esa imagen de Docker por nosotros?

https://github.com/pypa/python-packaging-user-guide/issues/267 contiene bastantes enlaces interesantes para empaquetar aplicaciones Python.

Tan pronto como se establezca la carga del paquete de Linux en GitHub (a través de PR # 123), nos subiremos al tren de CI para macOS , ¡sí! : mmm:

La siguiente gran cosa después de obtener EXE para Windows y los paquetes para macOS en funcionamiento podría ser la creación de una AppImage para Linux. Esto es algo similar a un archivo .dmg en una Mac. ¡Sería una solución única para todas las distribuciones GNU / Linux! : tada:: smiley:

AppImage también tiene (algo) una AppStore, denominada AppImageHub . Y la comparación te hace entender que es algo realmente genial. : +1:

¡Suena bien para mí!

A partir de ahora, la creación de un paquete de aplicaciones en macOS (con PyInstaller) no funciona del todo. Como alternativa, pensé, podríamos crear una fórmula Homebrew. Actualmente estoy mirando la documentación relacionada:

Hmmm, parece que se necesita a alguien con una Mac para desarrollar la fórmula de manera efectiva. Aunque en realidad no parece difícil. :pensando:

Aquí hay fórmulas relacionadas con Python (3):

  • Python (parece instalar 3.7; Python @ 3 es un enlace simbólico, un llamado "Alias")
  • wxPython (depende de Python @ 2 , consulte también https://github.com/Homebrew/homebrew-core/issues/32744)

Puede ser suficiente depender de Python@3 (= 3.7) e instalar wxPython a través de pip ( como en nuestras pruebas ).

Solo como referencia, si los lanzamientos automáticos no funcionan (probablemente no lo harán actualmente, ya que api_key: está configurado solo como un valor de muestra ), así es como el proyecto VSCodium realiza lanzamientos automáticos en GitHub. : +1:

Ram, has mencionado que el "instalador de Windows" es la principal prioridad del presente. Estoy de acuerdo.

Anotemos el estado actual de la unión.

Windows Installer (descripción general del progreso)

  • Las compilaciones de Windows funcionan en AppVeyor desde octubre de 2018.
  • Esas compilaciones crean un binario .EXE de Windows y un instalador .MSI (ver trabajo de ejemplo ).
  • El tamaño del archivo del instalador .MSI es tan pequeño que sugiere que en realidad está vacío.
  • Recuerdo que probó el .EXE (descargándolo y ejecutándolo) y confirmó que el .MSI no funcionaría. (¿O fue alguien más que lo probó por mí? No estoy seguro).
  • Recuerdo que mencioné en algún otro número (¿o fue un chat privado de nosotros?) Lo que se necesita para construir un instalador de MSI que funcione (en realidad es solo un archivo de proyecto de MS Visual Studio, o algo así).

Creo que lo he preparado todo. Ahora, como no tengo una computadora con Windows ni planeo comprar una (lo mismo para macOS, por cierto), lo único que falta es alguien que se haga cargo y coloque la pieza faltante del rompecabezas en su lugar. Desde mi intuición, estamos muy, muy cerca de la "tarea completada".

Próximos pasos (se necesita voluntario)

Parece que todo lo que tiene que hacer es crear la configuración necesaria con la extensión Proyectos de instalación de Microsoft Visual Studio , de acuerdo con una respuesta en StackOverflow .

Por lo tanto, ¿puede hacerse cargo? Lo que hay que hacer, IIUC, es:

  1. Crear un proyecto de Visual Studio con una configuración de instalador
  2. Asegúrese de que el instalador se compile correctamente en su máquina local
  3. Agregue el archivo .vdproj a este proyecto

AppVeyor detectará ese archivo, compilará el instalador y lo proporcionará para descargar en la página de compilación de artefactos .

Referencias

Desde mi intuición, estamos muy, muy cerca de la "tarea completada".

No siento que si empiezo a trabajar en él, estará casi terminado. Ni siquiera sé cómo usar Visual Studio Project, o cuál es nuestro plan actual. Si tuviera que tomar esta tarea, supongo que tomaría unos días de trabajo a tiempo completo.

Has puesto mucho esfuerzo en esto, así que no me siento muy bien por decirte esto, pero definitivamente no me ofreceré como voluntario para trabajar en este tema. PythonTurtle no está cerca de ser una prioridad en mi vida en este momento que dedicaría más de una hora, como mucho, a mejorarlo.

¿Me estoy molestando al señalar este problema desde otros problemas, diciendo que nada vale nada sin este problema? No evitaré que trabajes en otros problemas, probablemente no me uniría porque ese esfuerzo me parece en vano, pero no te bloquearé, y si me necesitas para revisiones de código o cosas pequeñas, Estaré feliz de hacer eso.

Tener otro pensamiento sobre esto. Dices "No tengo ni una computadora con Windows ni planeo comprar una". Si su objeción para hacer los elementos que enumeró es porque ha hecho lo suficiente en este ticket, o porque prefiere no perder su tiempo haciendo cosas relacionadas con Windows, entonces sí, esa es una objeción justa.

Si el problema es que no desea gastar dinero en una licencia de Windows, entonces quizás tenga solución. Una idea sería usar ReactOS y ver si ejecuta Visual Studio Project. Si ReactOS no es una opción, entonces tal vez pueda conseguirle una licencia / máquina de Windows. Avísame si te resulta útil.

Avísame si te resulta útil.

¿Conoce a una persona que esté _entusiasta_ acerca de la programación en Windows? Windows es un entorno desordenado para Python. No quiero contribuir a que una imagen falsa de "Python + Windows" encajen bien, eso es todo.

Consulte https://github.com/PythonTurtle/PythonTurtle/issues/108#issuecomment -683420022 para obtener soluciones alternativas para crear un instalador MSI (WiX, WiX.Py ). Podemos tener éxito de esa manera en combinación con las acciones de GitHub. ¿Alguien quiere darle una oportunidad?

¿Alguien quiere darle una oportunidad?

Yo no, así que supongo que esperaremos hasta que llegue un posible voluntario.

Una lista de tareas ...

  • [] __Linux__: compilación exitosa de pyinstaller

    • [] Automatizado en acciones de GitHub

  • [] __macOS__: compilación exitosa de pyinstaller

    • [] Automatizado en acciones de GitHub

  • [] __Windows__: compilación exitosa de pyinstaller

    • [] Automatizado en acciones de GitHub

Algunas sugerencias para ayudarlo a progresar:

  • [x] Con python3 setup.py clean bundle puedes construir todos los paquetes binarios (se usa PyInstaller).
  • [x] Los binarios se compilan con éxito para todas las plataformas (incluido .exe para Windows), por lo que recuerdo.
  • [] Los usuarios de Windows parecen esperar un instalador de Windows ; esto podría ser un instalador de MSI o WiX.Py (ambos aún no están preparados).
  • [] Las acciones de GitHub deberían enviar binarios automáticamente a nuestras versiones de GitHub cada vez que enviamos una etiqueta de Git a master ; es posible que deseemos usar algo como actions / create-release para que esto sea menos laborioso para nosotros.

¡Recibimos una respuesta súper agradable de @judej sobre la solicitud de ayuda de la Comunidad de desarrolladores de Microsoft que había publicado! :alegría:

En pocas palabras: ningún MSI se ofrece como voluntario para nosotros, pero hay dos proyectos más interesantes, uno que crea un instalador y el otro que crea una aplicación Python ZIP :

  1. pynsist :
  2. shiv - _para construir zipapps Python totalmente autónomos como se describe en PEP 441, ¡pero con todas sus dependencias incluidas! _

Éstas podrían ser dos buenas alternativas que vale la pena evaluar. ¡Gracias Jude! : 100:: medal_militar:

Frio. También escuché recientemente sobre PyOxidizer . Todavía no estoy 100% seguro de haber entendido el proyecto ( discusión ) pero es posible que haga lo que queremos.

Intentaré hacer esto con shiv durante el fin de semana. Intente PyOxidizer y luego podemos comparar notas.

Lo siento, comencé un nuevo trabajo hace unos días y no tendré tiempo para hacer nada :(

PyOxidizer parece un experimento: una aplicación de Python que se ejecuta en "una máquina virtual de Rust", una capa nativa del sistema operativo creada con Rust. No estoy seguro de qué beneficio proporciona esto. ¿No funciona bien la configuración PyInstaller que ejecutamos? : 3rd_place_medal:

shiv es un enfoque totalmente nuevo (nuevo en nuestro "portafolio" de artefactos de lanzamiento), que podría ser interesante de proporcionar a nuestra audiencia. Encuentro la idea emocionante (aunque estaría dispuesto a apostar que pocas personas podrían usarla). : 2nd_place_medal:

pynsist suena como el instalador de Microsoft Windows que estamos buscando. Esto podría proporcionar la experiencia de usuario que la gente de Windows parece esperar:: uno: descargar el instalador,: dos: ejecutarlo para instalar y agregar una entrada al menú de inicio,: tres: iniciar la aplicación desde el menú de inicio. : 1st_place_medal:

La desventaja de pynsist es solo Windows. Intentaré avanzar Shiv (de LinkedIn) en Mac y Linux.

¿Fue útil esta página
0 / 5 - 0 calificaciones