Как ускорить «импорт numpy», исключив ненужные подмодули

#python #performance #numpy #module #python-import

#python #Производительность #numpy #модуль #python-импорт

Вопрос:

У нас есть набор тестов, который выполняет сотни скриптов Python. После оптимизации нашего собственного кода мы обнаружили, что большая часть времени тестирования теперь тратится на загрузку numpy и matplotlib. Давайте сосредоточимся здесь на numpy.

 time python3 -c 'import numpy'
 

дает мне 360 мс.

Команда

 python3 -X importtime -c 'import numpy'
 

показывает, что значительная часть этого времени тратится на загрузку подмодулей numpy.fft , numpy.polynomial , numpy.random , которые нам не нужны. Может быть, нам даже не нужно numpy.lib . Как предотвратить загрузку этих подмодулей?

Наша наивная попытка

 python3 -X importtime 'from numpy import core'
 

улучшения не приносит; модули, отличные core от перечисленных, по-прежнему перечислены, а время загрузки практически не изменилось.

Комментарии:

1. Если вы изучите файлы инициализации в github, вы обнаружите, что импорт действительно многочисленный. Если вы не сможете сузить те части, которые вам действительно нужны, вам может не повезти… смотрите github.com/numpy/numpy/blob/master/numpy/core/__init__.py как вы использовали в своем примере

2. Интересная проблема, может быть, просто украсть исходный код, который вам нужен, напрямую из numpy, а не пытаться импортировать его, если производительность так важна?

3. рассматривали ли вы возможность запуска сценариев из общего интерпретатора?