Подтвердить что ты не робот

Можно ли использовать опцию python -S?

Параметр -S для python определяется документацией как "Отключить импорт сайта модуля и зависящие от сайта манипуляции с sys.path, которые он влечет за собой". Я обнаружил, что запуск python на моей машине более чем в два раза быстрее, иногда намного больше, когда я использую эту опцию. Например, на одной (медленной) машине:

$ time python -c 'print "hello"'   
hello
python -c 'print "hello"'  0.14s user 0.03s system 85% cpu 0.204 total

$ time python -Sc 'print "hello"'
hello
python -Sc 'print "hello"'  0.02s user 0.01s system 73% cpu 0.038 total

Это 5,3-кратное ускорение. И, похоже, он работает нормально, по крайней мере, с написанными мной сценариями. Каковы его недостатки?

4b9b3361

Ответ 1

Это, вероятно, не очень хорошая идея. Помимо всего прочего, это означает, что каталог сайтов-пакетов не будет добавлен в путь, поэтому вы не сможете импортировать ничего, кроме стандартных модулей lib:

python -Sc "import numpy"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named numpy

Вы можете посмотреть site.py самостоятельно, чтобы увидеть, что он делает. Это просто модуль в каталоге обычной библиотеки. По крайней мере, в моей системе, похоже, он выполняет четыре основные функции:

  • устанавливает пути пакетов сайтов
  • устанавливает кодировку по умолчанию
  • определяет несколько вспомогательных функций для интерактивного использования (quit и help)
  • настраивает пользовательскую настройку сайта

Первый, вероятно, самый критический, как упоминалось выше. Второй может быть важным для выполнения строковых операций ввода-вывода в зависимости от настроек вашей системы (т.е. Вы можете получить ошибки, если кодировка по умолчанию установлена ​​неправильно). Третий, вероятно, не так важен. Последнее может иметь важное значение, если вам нравится настраивать пути для каждого пользователя (позволяя пользователям иметь собственные каталоги личных библиотек и т.д.).

Ответ 2

Флаг -S выполняет следующие действия:

не подразумевают "импорт сайта" при инициализации

Это означает, что модуль site не импортируется во время инициализации Python. Краткое описание состоит в том, что этот модуль "добавит пути к конкретному сайту для пути поиска модуля и добавит несколько встроенных компонентов". Выполнение всей этой работы не приведет к ускорению запуска.

Используя документацию в качестве руководства, флаг -S приводит к:

  • В sys.path добавлены дополнительные модули. Вы можете сравнить разницу, запустив python и python -S и выполнив следующее как в import sys; print sys.path. Многие модули не будут доступны, поэтому вы не сможете их импортировать.
  • Пользовательский код инициализации сайта не будет запущен (это может быть определено в модуле под названием sitecustomize).
  • Пользовательский код инициализации не будет запущен (это может быть определено в модуле с именем usercustomize).

Короткий ответ на ваш вопрос: да, он запускает запуск Python быстрее, но многие модули и код настройки не будут доступны или возможны.

Если вы в первую очередь импортируете свои собственные модули и пишете свои собственные вычисления/код, тогда флаг -S прекрасен. Но если у вас есть установка Python с установленными в разных местах модулями, вы не сможете использовать их с флагом -S.

Ответ 3

Когда вы это сделаете, вы потеряете большую часть пути поиска модуля.

$ python -S
Python 2.6.8 (unknown, Apr 19 2012, 01:24:00) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
>>> import sys
>>> len(sys.path)
9

$ python
Python 2.6.8 (unknown, Apr 19 2012, 01:24:00) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> len(sys.path)
26

В зависимости от вашей системы это может иметь серьезные последствия для того, какие модули доступны.

Другие вещи, которые могут сломаться, - это локаль (установленная по умолчанию для системы по адресу site.py), а в Windows некоторые кодеки не будут доступны (они псевдонимы site.py).