Python очень медленно запускается в Windows 7

Python занимает в 17 раз больше времени для загрузки на мою машину под Windows 7, чем Ubuntu 14.04, работающей на виртуальной машине (внутри Windows на том же оборудовании). Распространение Anaconda3 используется для Windows и Ubuntu по умолчанию python3.4.

Из приглашения Bash (Git Bash в Windows):

$ time python3 -c "pass"

возвращается в 0.614s на Windows и 0.036s на Linux

Когда пакеты загружаются, ситуация ухудшается:

$ time python3 -c "import matplotlib"

возвращает в 6.01s в Windows и 0.189s в Linux

Spyder берет колоссальные 51s для загрузки на Windows и 1.5s на Linux.

Мне не удавалось определить, почему у меня такие проблемы с производительностью. Кто-нибудь есть идеи, что я должен попробовать дальше?

изменить:

Почему python настолько медленнее в Windows? был предложен как возможный дубликат, но мой внешний вид намного больше и не объясняется просто разными библиотечными зависимостями и компиляторами, Мне кажется, что это связано с различиями файловой системы.

Я подозревал антивирусные проверки при доступе, но на всякий случай отключил антивирус.

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

Update:

Новая установка Windows 8.1 Pro на том же ПК решила проблему. После переустановки всех приложений и производительности Anaconda3 Python это лучшее, что я видел. К сожалению, основная причина этой проблемы пока неизвестна.

Исправление:

После того, как мой ИТ-отдел установил программное обеспечение для шифрования Sophos SafeGuard и MS Endpoint Protection, проблема вернулась. Тот же медленный старт, что и раньше. Отключение дополнительного программного обеспечения не решило проблему, поэтому мы пытаемся проверить тесты на других машинах для отслеживания проблемы.

Ответы

Ответ 1

Проблема решена путем удаления Sophos SafeGuard. Это не очень удовлетворительное решение, хотя, поскольку моя компания использует это программное обеспечение для шифрования файловой системы в каталогах, к которым я обращаюсь ежедневно. У меня нет других проблем с производительностью, кроме Python (и, по-видимому, Ruby).

ПРИМЕЧАНИЕ. Sophos SafeGuard не является антивирусным программным обеспечением. Это система шифрования файловой системы предприятия. Странно то, что шифрование явно не включено для локальных файловых систем, например, где установлен Python.

Ответ 2

Может быть, не относится к вашему делу, но я обнаружил, что запуск python в Windows с помощью Sophos Safeguard и Mcafee Enteprise Antivirus, что время запуска python было на порядок медленнее, если python запускался как повышенный процесс. Переключение его на обычный рабочий процесс сделало для меня существенную разницу.

Ответ 3

  • Возможно, вкладчику дисперсии запуска могут быть загруженные по умолчанию модули. Вы можете использовать sys.modules для сравнения двух сред.

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

Для меня ответ

$ 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

И вы можете использовать виртуальные envs для управления загруженными по умолчанию модулями. https://virtualenv.pypa.io/en/latest/

  1. Git bash для окон, похоже, для меня плохо работает с python. Я не вижу баннер версии при запуске интерпретатора. Я бы сравнил время начала с подсказкой cmd. Или даже с запуском питона python. Например.

-

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