Anotaciones de tipos: \xbfSon pyth\xf3nicas? Tambi\xe9n versiones de paquetes y grafos de dependencias https://podcast.jcea.es/python/18\n
En este audio hay un hablante que no identifico. \xbfQuien es?. Es\nquien habla, por ejemplo, en 01:06:00 o en 01:12:00. \xbfAntoni?
\nParticipantes:
\nJes\xfas Cea, email: jcea@jcea.es, twitter:\n @jcea, https://blog.jcea.es/,\n https://www.jcea.es/. Conectando desde Madrid.
\nV\xedctor Ram\xedrez, twitter: @virako,\n programador python y amante de\n vim, conectando desde Huelva.
\nDani, conectando desde M\xe1laga.
\nEduardo Castro, email:\n info@ecdesign.es. Conectando desde A\n Guarda.
\nAudio editado por Pablo G\xf3mez, twitter:\n@julebek.
\nLa m\xfasica de la entrada y la salida es "Lightning Bugs", de Jason\nShaw. Publicada en https://audionautix.com/ con licencia\n- Creative Commons Attribution 4.0 International\nLicense.
\n[00:52] Pre\xe1mbulo.
\nDesign of CPython\u2019s Garbage Collector:\n https://devguide.python.org/garbage_collector/.
\nDificultades con el horario de la tertulia.
\nProblemas para publicar los audios.
\nEditar es un infierno.
\nLas notas de los audios tienen una importancia\n transcendental.
\nDin\xe1mica de las tertulias.
\n[08:32] Presentaciones.
\nRaspberry Pi Pico:\n https://www.raspberrypi.org/products/raspberry-pi-pico/.
\nMicropython: https://www.micropython.org/.
\n[13:32] El aviso legal para poder grabar los audios.
\n[14:32] Bugs sobre "pickle"\n https://docs.python.org/3/library/pickle.html en el m\xf3dulo\n __main__
.
Se trata de un problema conocido.
\nEjemplo de c\xf3digo: https://pastebin.com/vGM1sh8r.
\nIssue24676: Error in pickle using cProfile\n https://bugs.python.org/issue24676.
\nIssue9914: trace/profile conflict with the use of\n sys.modules[__name__]
https://bugs.python.org/issue9914.
Issue9325: Add an option to pdb/trace/profile to run library\n module as a script https://bugs.python.org/issue9325.
\n[16:27] Lo importante que es abrir bugs, para que puedan\n solucionarse. Queja productiva.
\n[18:12] Nueva versi\xf3n de MYPY http://mypy-lang.org/ y MYPYC\n https://github.com/mypyc/mypyc, que aprovechan Python 3.9.
\nSigue fallando mucho.
\n[20:42] pyannotate https://pypi.org/project/pyannotate/ para\n meter anotaciones de tipos de forma autom\xe1tica.
\n[22:52] Puedes usar tipos o no. Son opcionales. Ventajas en\n equipos grandes.
\nLinter: https://es.wikipedia.org/wiki/Lint.
\nImpone disciplina y una cultura.
\nLas anotaciones de tipos no se verifican en tiempo de\n ejecuci\xf3n. Se usan en el sistema de test e integraci\xf3n\n continua.
\nUna de la ventaja de los "__slots__
" es que si te\n equivocas en el nombre de atributo en una asignaci\xf3n, te\n dar\xe1 un error claro. Los tipos ayudan aqu\xed tambi\xe9n.
"pyannotate" https://pypi.org/project/pyannotate/.
\nLas anotaciones de tipos te permiten luego compilar Python\n para ganar rendimiento "sin coste".
\nLas anotaciones se pueden meter en el mismo c\xf3digo o en un\n fichero "compa\xf1ero".
\nUsar un fichero "compa\xf1ero" es \xfatil para poder usar\n anotaciones modernas en versiones antiguas de Python.
\nEvitar "contaminar" el sistema de control de versiones\n con cambios masivos irrelevantes que ofuscan la historia\n de un proyecto. Por ejemplo, el autor original del c\xf3digo.
\nQue los creadores de c\xf3digo y los etiquetadores de tipos\n sean personas diferentes.
\n"typeshed": Collection of library stubs for Python, with\n static types: https://github.com/python/typeshed.
\n\xbfY meter tipos en los comentarios, como se hac\xeda\n antiguamente?
\nHay mucha literatura de ingenier\xeda de software sobre si es\n bueno documentar tipos o no, seg\xfan el tipo de equipo y el\n tipo de proyecto.
\n[40:17] Python podr\xeda ser mucho m\xe1s r\xe1pido aunque no se usen\n tipos. Podr\xeda ser mucho m\xe1s inteligente.
\nDescubrimiento de tipos en tiempo de ejecuci\xf3n.
\nTema recurrente.
\nNumba: https://numba.pydata.org/.
\nJavascript V8:\n https://en.wikipedia.org/wiki/V8_(JavaScript_engine).
\n[43:06] Habiendo tantos compiladores, \xbfpor qu\xe9 no se integra\n alguno en el int\xe9rprete normal de Python?
\nComplejidad y compatibilidad.
\nFaltan manos.
\nHay muchos "g\xe9rmenes" que no germinan.
\nDispersi\xf3n de esfuerzos.
\n[46:12] Puntos de dolor de Python para la gente que viene de\n otros lenguajes:
\nTipos.
\nVelocidad.
\nEspacios significantes.
\n[46:37] \xbfQu\xe9 es "Python"?
\nCada novedad de sintaxis de Python cambia el lenguaje. \xbfQu\xe9\n es Python?
\nHay organizaciones grandes que un lenguaje sin tipos ni\n siquiera lo consideran.
\n[51:22] Cultura com\xfan en todos los proyectos Python. Baja\n barrera de entrada si conoces esa cultura.
\nLa cultura va evolucionando.
\nSoluci\xf3n de compromiso: Meter tipos solo en la frontera.
\n[53:02] El tipado avanzado de Python 3.9 da un error de sintaxis\n al importar el c\xf3digo en una versi\xf3n anterior de Python.
\n[54:46] El operador morsa no se puede usar dentro de un "list\n comprehension":
\n >>> [i for i in ('a', '' ,'b') if i := i.strip()]\n File "<stdin>", line 1\n [i for i in ('a', '' ,'b') if i := i.strip()]\n ^\n SyntaxError: invalid syntax\n
\nNo queda otra que escribirlo como:
\n >>> [i.strip() for i in ('a', '' ,'b') if i.strip()]\n ['a', 'b']\n
\nduplicando el i.strip()
.
[56:40] En versiones de Python anteriores a 3.8 no se podr\xeda\n usar un continue
en un finally
. El texto era\n https://docs.python.org/3.7/reference/compound_stmts.html#the-try-statement:
\n\nWhen a return, break or continue statement is executed in\nthe try suite of a try...finally statement, the finally clause\nis also executed \u2018on the way out.\u2019 A continue statement is\nillegal in the finally clause. (The reason is a problem with\nthe current implementation \u2014 this restriction may be lifted in\nthe future).
\n
[57:47] f-string con datetime
\n https://docs.python.org/3/library/datetime.html.
[59:22] Modo depuraci\xf3n en f-strings en Python 3.8:
\n>>> a = 5\n>>> f'{a=}'\n'a=5'\n
\n\xdatil para el loging.
\n[01:00:47] Versiones fijas de dependencias y actualizar un\n despliegue.
\nHerramientas para esto: "pip"\n https://pypi.org/project/pip/, "virtualenv"\n https://pypi.org/project/virtualenv/.
\n"pipenv" https://pypi.org/project/pipenv/.
\n"Poetry": https://pypi.org/project/poetry/.
\nGrafo de dependencias "pip-tree": https://pypi.org/project/pip-tree/.
\nParalelismos con el enlazado est\xe1tico y din\xe1mico.
\n[01:14:22] \xbfPor qu\xe9 se ha instalado este paquete, qu\xe9 paquetes\n exige y qu\xe9 paquetes dependen de \xe9l?
\npip show
.
Grafo de dependencias "pip-tree": https://pypi.org/project/pip-tree/.
\n[01:19:22] Visualizar el grafo de versiones de un sistema de\n control de versiones moderno. Por ejemplo con Mercurial: "hg\n glog
" https://www.mercurial-scm.org/.
[01:23:07] Recogida de basuras:
\nDesign of CPython\u2019s Garbage Collector:\n https://devguide.python.org/garbage_collector/.
\nHora de sacar la basura garbage collector - Pablo Galindo y\n Victor Terr\xf3n - PyConES 2018\n https://www.youtube.com/watch?v=G9wOSExzs5g.
\nLa recolecci\xf3n de basura de la generaci\xf3n m\xe1s antigua\n funciona de forma diferente. En vez de ser por un n\xfamero\n fijo de desequilibrio entre creaci\xf3n y destrucci\xf3n de\n objetos, funciona por porcentaje.
\n[01:31:37] Divagaci\xf3n: Powerball https://powerball.org.uk/.
\n[01:31:52] Explicaci\xf3n de c\xf3mo funciona "__slots__
"\n https://docs.python.org/3/reference/datamodel.html.
[01:34:22] Libro "CPython Internals":\n https://realpython.com/products/cpython-internals-book/.
\nWebsite de "Real Python": https://realpython.com/. Merece\n bastante la pena.
\nTambi\xe9n tienen podcast: "The Real Python Podcast: Python\n Tips, Interviews, and More"\n https://realpython.com/podcasts/rpp/.
\n[01:36:42] M\xe1s sobre "__slots__
" \n https://docs.python.org/3/reference/datamodel.html.
T\xe9cnica est\xe1ndar.
\nUn diccionario vac\xedo ocupa 64 bytes: sys.getsizeof({})
.
Se puede usar para evitar errores mecanogr\xe1ficos al escribir\n en atributos.
\n[01:38:52] "AutoScraper: A Smart, Automatic, Fast and\n Lightweight Web Scraper for Python"\n https://pypi.org/project/autoscraper/. B\xfasquedas "borrosas".
\n[01:43:02] Librer\xeda para dibujar grafos: graphviz\n https://pypi.org/project/graphviz/.
\nLe das un texto describiendo nodos y conexiones entre nodos\n y calcula un gr\xe1fico.
\nSer\xeda trivial para dibujar el grafo de dependencias de\n "pip".
\nEjemplo:
\nEl gr\xe1fico de antes, con ciclos:\n https://lists.es.python.org/pipermail/general/attachments/20201229/0c14bc58/attachment-0002.png.
\nEl gr\xe1fico de despu\xe9s, sin ciclos:\n https://lists.es.python.org/pipermail/general/attachments/20201229/0c14bc58/attachment-0003.png.
\n[01:47:22] \xbfC\xf3mo asegurarse que el nombre de un fichero no tenga\n caracteres extra\xf1os? \xa1Problema de seguridad!
\nExpresiones regulares. Cuidado con el unicode\n https://en.wikipedia.org/wiki/Unicode. Mejor usar una\n lista blanca que una lista negra.
\nUsar pathlib.is_relative_to()
\n https://docs.python.org/3/library/pathlib.html#pathlib.PurePath.is_relative_to.\n Novedad en Python 3.9.
[01:52:07] \xa1Usa la versi\xf3n actual de Python, leches! Ahora\n mismo, Python 3.9.
\nVentajas de compilar el int\xe9rprete desde c\xf3digo fuente para\n no depender de la versi\xf3n que te proporciona el sistema\n operativo.
\nPuedes tener tu propio int\xe9rprete de Python dentro de un\n "virtualenv" https://pypi.org/project/virtualenv/.
\nProyectos "llave en mano". El cliente quiere algo que se\n instale como un componente en lo que ya conoce. Por ejemplo,\n en un panel de configuraci\xf3n en un servicio de hospedaje.
\n[01:56:47] Jes\xfas Cea repite una vez m\xe1s la an\xe9cdota de que\n al principio de los tiempos para conducir un coche ten\xedas\n que ser mec\xe1nico, pero ya no.
\nFalta toda la base, pero... \xbfHace falta?
\n[01:59:12] Memoria escasa en un microcontrolador.
\n[01:59:55] Final.
\n