Python é muito lento para iniciar no Windows 7

O Python leva 17 vezes mais tempo para carregar na minha máquina com Windows 7 do que o Ubuntu 14.04 executado em uma VM (dentro do Windows no mesmo hardware). A distribuição Anaconda3 é usada no Python3.4 padrão do Windows e do Ubuntu.

A partir de um prompt do Bash (Git bash no Windows):

$ time python3 -c "pass" 

retorna em 0.614s no Windows e 0.036s no Linux

Quando os pacotes são carregados, a situação fica pior:

 $ time python3 -c "import matplotlib" 

retorna em 6.01s no Windows e 0.189s no Linux

Spyder leva 51s gritante para carregar no Windows e 1.5s no Linux.

Eu não tive muita sorte em determinar por que tenho esses problemas de desempenho. Alguém tem alguma idéia do que eu deveria tentar a seguir?

editar:

Por que o Python é muito mais lento no Windows? foi sugerido como uma possível duplicata, mas meu desempenho é muito maior e não é explicado simplesmente por dependencies de bibliotecas e compiladores diferentes. Isso parece estar relacionado a diferenças no sistema de arquivos.

Eu suspeitava de verificações de access antivírus, mas desativei o antivírus apenas por precaução.

 >>> 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'] 

Atualizar:

Uma nova instalação do Windows 8.1 Pro no mesmo PC resolveu o problema. Depois de reinstalar todos os aplicativos e desempenho do Anaconda3 Python é o melhor que eu já vi. Infelizmente, a causa raiz desse problema ainda é desconhecida.

Correção:

Depois que meu departamento de TI instalou o software de criptografia Sophos SafeGuard e o MS Endpoint Protection, o problema retornou. Começo lento como antes. Desabilitar o software extra não resolveu o problema, por isso estamos testando outras máquinas para rastrear o problema.

O problema é resolvido com a desinstalação do Sophos SafeGuard. Isso não é realmente uma solução satisfatória, já que minha empresa usa esse software de criptografia de sistema de arquivos em diretórios que eu access diariamente. Eu não pareço nenhum outro problema de desempenho, exceto com o Python (e aparentemente o Ruby também).

NOTA: O Sophos SafeGuard não é um software antivírus. É um sistema de criptografia do sistema de arquivos corporativo. O estranho é que a criptografia não é explicitamente habilitada para filesystems locais, como onde o Python está instalado.

Pode não ser relevante para o seu caso, mas descobri que executar python no Windows com o Sophos Safeguard e o Mcafee Enteprise Antivirus que os tempos de boot do Python eram uma ordem de magnitude mais lenta se o Python estava sendo executado como um processo elevado . Mudá-lo para funcionar como um processo normal fez uma diferença dramática para mim.

  1. Talvez um contribuinte para a variação de boot possa ser módulos carregados padrão. Você pode usar sys.modules para comparar seus dois ambientes.

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

Para mim a resposta é

 $ 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 

E você pode usar envs virtuais para manipular os módulos carregados padrão. https://virtualenv.pypa.io/en/latest/

  1. Git bash for windows parece estar se comportando mal para mim com python. Não vejo o banner da versão quando inicio o intérprete. Eu compararia as horas de início com um prompt de cmd. Ou até mesmo com um python lançando python. Por exemplo

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