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/
- Git bash для окон, похоже, для меня плохо работает с python. Я не вижу баннер версии при запуске интерпретатора. Я бы сравнил время начала с подсказкой cmd. Или даже с запуском питона python. Например.
-
import subprocess
import time
start = time.time()
subprocess.check_call(["python", '-c ', 'pass'])
print time.time() - start