Python en español #28: Tertulia 2021-04-13

Python en español - Un pódcast de Jesús Cea

Categorías:

Tener varias versiones de Python en el mismo ordenador, estado de Durus, su licencia y cómo funciona la persistencia de datos https://podcast.jcea.es/python/28 Participantes: Jesús Cea, email: [email protected], twitter: @jcea, https://blog.jcea.es/, https://www.jcea.es/. Conectando desde Madrid. Jesús, conectando desde Ferrol. Felipem, conectando desde Cantabria. Eduardo Castro, email: [email protected]. Conectando desde A Guarda. Víctor Ramírez, twitter: @virako, programador python y amante de vim, conectando desde Huelva. Sergio, conectando desde Vigo. Juan José, Nekmo, https://nekmo.com/, https://github.com/Nekmo/. Madrileño conectando desde Málaga. Miguel Sánchez, email: [email protected], conectando desde Las Palmas. Audio editado por Pablo Gómez, twitter: @julebek. La música de la entrada y la salida es "Lightning Bugs", de Jason Shaw. Publicada en https://audionautix.com/ con licencia - Creative Commons Attribution 4.0 International License. [00:52] Presentaciones. [03:47] Utilizar diferentes versiones de Python en el mismo ordenador. Cada paquete instalado está vinculado a una instancia concreta de Python instalada en el sistema. Nunca hacer pip install, sino indicar la versión: pip3.9 install. A la hora de instalar paquetes Python en la versión nativa del sistema operativo, se puede usar pip o bien el gestor de paquetes del sistema operativo. Mezclar ambas es una receta para el desastre. [16:37] Un problema de los paquetes precompilados ("wheels" https://www.python.org/dev/peps/pep-0427/) es que no se suelen precompilar de forma retroactiva para la última versión de Python que acaba de salir. No suelen estar disponibles hasta que sale una versión nueva del paquete, lo que puede tardar meses. [19:52] ¿Bibliotecas para manejar imágenes, compatibles con PyPy https://www.pypy.org/? Numpy https://numpy.org/ aún no funciona en PyPy https://www.pypy.org/. [21:17] ¿Qué es PyPy https://www.pypy.org/ exactamente? Jit: Compilación al vuelo https://es.wikipedia.org/wiki/Compilaci%C3%B3n_en_tiempo_de_ejecuci%C3%B3n. Barrera de entrada muy grande para entrar en el proyecto. Curva de aprendizaje. Problemas con los módulos en C. No valoraron la importancia del ecosistema. HPy https://hpyproject.org/. [27:27] Experiencia de un par de semanas con Flit https://pypi.org/project/flit/. Jesús Cea lo está utilizando para publicar su biblioteca toc2audio https://docs.jcea.es/toc2audio/. Herramienta propuesta en la charla "Python Packaging: Lo estás haciendo mal" https://www.youtube.com/watch?v=OeOtIEDFr4Y, de Juan Luis Cano. https://github.com/astrojuanlu/charla-python-packaging. https://nbviewer.jupyter.org/format/slides/github/astrojuanlu/charla-python-packaging/blob/main/Charla%20Python%20packaging.ipynb#/ PEP 621 -- Storing project metadata in pyproject.toml https://www.python.org/dev/peps/pep-0621/. Lo importante que es tener enlaces directos al "changelog" o a la documentación en PyPI https://pypi.org/. [31:32] Módulos de documentación. Carencias. Docstrings. doctest https://docs.python.org/3/library/doctest.html. Sphinx https://pypi.org/project/Sphinx/. make html. Tema eterno: Incluir una biblioteca en la biblioteca estándar o como biblioteca estándar. ReST: reStructuredText https://docutils.sourceforge.io/rst.html. PEP 287 -- reStructuredText Docstring Format https://www.python.org/dev/peps/pep-0287/. docutils: https://pypi.org/project/docutils/. [40:02] ¿Formato tertulia o preguntas y respuestas? [41:22] Estado actual de Durus https://www.mems-exchange.org/software/DurusWorks/ y comentarios variados sobre el sistema de persistencia. Jesús Cea ha estado intentando conectar con los autores, con poco éxito. Jesús Cea tiene problemas con la licencia. ¿Abandonar el proyecto y pasarse a ZODB https://zodb.org/en/latest/? La gente está haciendo "forks" https://en.wikipedia.org/wiki/Fork_(software_development) pasando olímpicamente de las licencias. Jesús Cea se está currando varios cambios de licencia en ciertos proyectos que le interesan, con muy poco éxito. ZOPE https://zopefoundation.github.io/Zope/. COPYRIGHT ASSIGNMENT https://www.copylaw.com/forms/copyassn.html. [50:32] ¿Cómo funciona un sistema de persistencia? Modelo completamente diferente a un ORM https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping. SQL: https://en.wikipedia.org/wiki/SQL. Working set: https://en.wikipedia.org/wiki/Working_set. [58:17] Volvemos al tema de licencias. [59:52] Explícame esto: https://lists.es.python.org/pipermail/general/2021-April/003476.html. Creamos un fichero "a.py" con el contenido: def x(): print('X') Creamos otro fichero "b.py" con el contenido: import a class clase: x = a.x def p(self): print(self.x) self.x() if __name__ == '__main__': a.x() b = clase() b.p() Ejecutas "b.py" y me explicas por qué sale lo que sale :-). [01:03:42] A la gente le encanta que le "piquen". [01:03:52] Las versiones actuales de Python ya han integrado el parche del "memory leak" que se habló en navidades. bpo-35930: Raising an exception raised in a "future" instance will create reference cycles #24995 https://github.com/python/cpython/pull/24995. [01:04:22] Llamada a ponencias de la PyConES https://2021.es.pycon.org/. [01:05:22] Volvemos al reto en https://lists.es.python.org/pipermail/general/2021-April/003476.html. Pista: los métodos son descriptores: https://docs.python.org/3/howto/descriptor.html. Bound method: https://www.geeksforgeeks.org/bound-methods-python/. Métodos estáticos: https://pythonbasics.org/static-method/. No se ha entendido nada porque ha habido numerosos cortes de sonido. El tema está bastante mejor explicado y se entiende en, por ejemplo, From Function to Method https://wiki.python.org/moin/FromFunctionToMethod. [01:10:02] Atributos de función. PEP 232 -- Function Attributes https://www.python.org/dev/peps/pep-0232/. Se pueden meter atributos a un método, pero se hace a nivel de clase, no de instancia, porque los métodos pertenecen a la clase, no a la instancia:class clase: def p(self): clase.p.hola = 78 >>> x=clase() >>> x.p() >>> x.p.hola 78 >>> y=clase() >>> a.p.hola 78 >>> clase.p.hola 78 [01:14:42] Notas de las grabaciones, temas futuros y enviar temas con algún tiempo previo a la tertulia si requieren pensar. [01:16:06] Final.