Python es muy lento para iniciar en Windows 7

Python demora 17 veces más en cargar en mi máquina con Windows 7 que Ubuntu 14.04 ejecutándose en una VM (dentro de Windows en el mismo hardware). La distribución de Anaconda3 se utiliza en Windows y en Ubuntu python3.4 predeterminado.

Desde un indicador de Bash (Git bash en Windows):

$ time python3 -c "pass" 

Vuelve en 0.614s en Windows y 0.036s en Linux

Cuando se cargan los paquetes, la situación empeora:

 $ time python3 -c "import matplotlib" 

retornos en 6.01s en Windows y 0.189s en Linux

Spyder toma la friolera de 51 para cargar en Windows y 1.5 en Linux.

No he tenido la suerte de determinar por qué tengo estos problemas de rendimiento. ¿Alguien tiene alguna idea de lo que debería intentar a continuación?

editar:

¿Por qué el python es mucho más lento en las ventanas? Se ha sugerido como un posible duplicado, pero mi rendimiento es mucho mayor y no se explica simplemente por las diferentes dependencias y comstackdores de la biblioteca. Esto me parece estar relacionado con las diferencias del sistema de archivos.

Tenía sospechas de exploraciones de acceso al antivirus pero deshabilité el antivirus por si acaso.

 >>> sys.path ['', 'c:\\Anaconda3\\python34.zip', 'c:\\Anaconda3\\DLLs', 'c:\\Anaconda3\\lib', 'c:\\Anaconda3', 'c:\\Anaconda3\\lib\\site-packages', 'c:\\Anaconda3\\lib\\site-packages\\Sphinx-1.2.3-py3.4.egg', 'c:\\Anaconda3\\lib\\site-packages\\cryptography-0.8-py3.4-win-amd64.egg', 'c:\\Anaconda3\\lib\\site-packages\\nose-1.3.4-py3.4.egg', 'c:\\Anaconda3\\lib\\site-packages\\win32', 'c:\\Anaconda3\\lib\\site-packages\\win32\\lib', 'c:\\Anaconda3\\lib\\site-packages\\Pythonwin', 'c:\\Anaconda3\\lib\\site-packages\\setuptools-14.3-py3.4.egg'] 

Actualizar:

Una nueva instalación de Windows 8.1 Pro en la misma PC solucionó el problema. Después de reinstalar todas las aplicaciones, el rendimiento de Anaconda3 Python es lo mejor que he visto. Desafortunadamente, la causa raíz de este problema es aún desconocida.

Corrección:

Después de que mi departamento de TI instaló el software de cifrado Sophos SafeGuard y MS Endpoint Protection, el problema volvió. El mismo comienzo lento que antes. Deshabilitar el software adicional no solucionó el problema, por lo que estamos probando pruebas en otras máquinas para detectar el problema.

El problema se resuelve al desinstalar Sophos SafeGuard. Sin embargo, esta no es realmente una solución satisfactoria ya que mi empresa utiliza este software de cifrado del sistema de archivos en directorios a los que accedo a diario. No he tenido ningún otro problema de rendimiento, excepto con Python (y aparentemente también Ruby).

NOTA: Sophos SafeGuard no es un software antivirus. Es un sistema de cifrado de sistema de archivos empresarial. Lo extraño es que el cifrado no está habilitado explícitamente para los sistemas de archivos locales, como donde se instala Python.

Puede que no sea relevante para su caso, pero descubrí que ejecutar Python en Windows con Sophos Safeguard y Mcafee Enteprise Antivirus, los tiempos de inicio de Python eran un orden de magnitud más lentos si Python se ejecutaba como un proceso elevado . Cambiarlo para que se ejecute como un proceso normal hizo una gran diferencia para mí.

  1. Quizás un contribuidor a la variación de inicio podría ser módulos cargados por defecto. Puede usar sys.modules para comparar sus dos entornos.

python -c "import sys;print(len(sys.modules))"

Para mi la respuesta es

 $ time py -2 -c "pass" real 0m0.054s user 0m0.000s sys 0m0.000s $ py -2 -c "import sys;print(len(sys.modules))" 44 $ time py -3 -c "pass" real 0m0.063s user 0m0.000s sys 0m0.000s $ py -3 -c "import sys;print(len(sys.modules))" 54 

Y puede utilizar envs virtuales para manipular los módulos cargados predeterminados. https://virtualenv.pypa.io/en/latest/

  1. Git bash para windows parece estar comportándose mal para mí con python. No veo el banner de versión cuando lanzo el intérprete. Yo compararía las horas de inicio con un indicador de cmd. O incluso con un python lanzador de python. P.ej

 import subprocess import time start = time.time() subprocess.check_call(["python", '-c ', 'pass']) print time.time() - start