Acelerando el cargador de “importación” de python

Estoy cada vez más frustrado por lo lento que es el inicio de python. Solo importar más o menos módulos básicos toma un segundo, ya que Python recorre sys.path en busca de archivos coincidentes (y genera 4 llamadas stat() – [“foo”, “foo.py”, “foo.pyc”, ” foo.so “] – para cada comprobación). Para un entorno de proyecto complicado, con toneladas de directorios diferentes, esto puede demorar alrededor de 5 segundos, todo para ejecutar un script que puede fallar instantáneamente.

¿La gente tiene sugerencias sobre cómo acelerar este proceso? Por ejemplo, un truco que he visto es establecer la variable de entorno LD_PRELOAD_32 en una biblioteca que almacena en caché el resultado de ENOENT llamadas ENOENT (por ejemplo, llamadas stat() fallidas) entre ejecuciones. Por supuesto, esto tiene todo tipo de problemas (progtwigs potencialmente confusos que no son de Python, almacenamiento en caché negativo, etc.).

comprimir tantos archivos pyc como sea posible (con la estructura de directorios adecuada para los paquetes), y colocar ese archivo zip como la primera entrada en sys.path (en el mejor disco local disponible, idealmente) puede acelerar mucho los tiempos de inicio.

Las primeras cosas que vienen a la mente son:

  • Prueba un camino más pequeño
  • Asegúrate de que tus módulos sean de Pyc para que se carguen más rápido
  • Asegúrate de no importar doble, o importar demasiado

Aparte de eso, ¿estás seguro de que las operaciones del disco son lo que te está atascando? ¿Su disco / sistema operativo está realmente ocupado o es viejo y lento?

Tal vez una desfragmentación está en orden?

Si te quedas sin opciones, puedes crear un ramdisk para almacenar tus paquetes de python. Un disco RAM aparece como un directorio en su sistema de archivos, pero en realidad se asignará directamente a la memoria RAM de su computadora. Aquí hay algunas instrucciones para Linux / Redhat.

Cuidado: un disco RAM es volátil, por lo que también deberá mantener una copia de seguridad de sus archivos en su disco duro normal, de lo contrario perderá sus datos cuando la computadora se apague.

Falta algo en su premisa: nunca he visto que algunos módulos básicos de “más o menos” tomen más de un segundo para importar, y no estoy ejecutando Python en lo que llamaría hardware de vanguardia. O se está ejecutando en un hardware muy antiguo, o se está ejecutando en una máquina sobrecargada, o la instalación de su sistema operativo o Python está rota de alguna manera. O realmente no estás importando módulos “básicos”.

Si se trata de uno de los tres primeros problemas, debe buscar el problema raíz para encontrar una solución. Si es el último, realmente necesitamos saber cuáles son los paquetes específicos que serán de ayuda.