Автор оригинала: Doug Hellmann.
sys
содержит атрибуты и функции для доступа к параметрам конфигурации времени компиляции или выполнения для интерпретатора.
Информация о версии во время сборки
Версия, используемая для создания интерпретатора C, доступна в нескольких формах. sys.version
– это удобочитаемая строка, которая обычно включает полный номер версии, а также информацию о дате сборки, компиляторе и платформе. sys.hexversion
проще использовать для проверки версии интерпретатора, поскольку это простое целое число. При форматировании с использованием hex ()
ясно, что части sys.hexversion
берутся из информации о версии, также видимой в более читаемом sys.version_info
(именованный кортеж из пяти частей, представляющий только номер версии). Отдельная версия C API, используемая текущим интерпретатором, сохраняется в sys.api_version
.
sys_version_values.py
import sys print('Version info:') print() print('sys.version =', repr(sys.version)) print('sys.version_info =', sys.version_info) print('sys.hexversion =', hex(sys.hexversion)) print('sys.api_version =', sys.api_version)
Все значения зависят от реального интерпретатора, используемого для запуска программы-примера.
$ python3 sys_version_values.py Version info: sys.version = '3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 03:13:28) \n[Clang 6.0 (clang-600.0.57)]' sys.version_info =, sys.hexversion = 0x30701f0 sys.api_version = 1013
Платформа операционной системы, используемая для создания интерпретатора, сохраняется как sys.platform
.
sys_platform.py
import sys print('This interpreter was built for:', sys.platform)
Для большинства систем Unix значение получается путем объединения вывода uname -s
с первой частью версии в uname -r
. Для других операционных систем существует жестко запрограммированная таблица значений.
$ python3 sys_platform.py This interpreter was built for: darwin
Смотрите также
- значения платформы – жестко заданные значения
sys.platform
для систем безuname
.
Реализация переводчика
Интерпретатор CPython – одна из нескольких реализаций языка Python. sys.implementation
предоставляется для определения текущей реализации библиотек, которым необходимо обойти любые различия в интерпретаторах.
sys_implementation.py
import sys print('Name:', sys.implementation.name) print('Version:', sys.implementation.version) print('Cache tag:', sys.implementation.cache_tag)
sys.implementation.version
совпадает с sys.version_info
для CPython, но будет отличаться для других интерпретаторов.
$ python3 sys_implementation.py Name: cpython Version:, Cache tag: cpython-37
Смотрите также
- PEP 421 – добавление
sys.implementation
Параметры командной строки
Интерпретатор CPython принимает несколько параметров командной строки для управления своим поведением, перечисленных в таблице ниже.
Флаги параметров командной строки Python
Вариант
Смысл
-B
не записывать файлы .py [co] при импорте
-b
выдавать предупреждения о преобразовании байтов в строку без правильное декодирование и сравнение байтов со строками
-bb
конвертировать байтовые предупреждения в ошибки
-d
вывод отладки из парсера
-E
игнорировать переменные среды PYTHON * (например, PYTHONPATH)
-я
проверять в интерактивном режиме после запуска скрипта
-O
немного оптимизировать сгенерированный байт-код
-OO
удалить строки документации в дополнение к оптимизации -O
-s
не добавляйте каталог сайта пользователя в sys.path
-S
не запускать ‘import site’ при инициализации
-t
выдавать предупреждения о несогласованном использовании вкладок
-tt
выдавать ошибки из-за несогласованного использования вкладок
-v
подробный
Некоторые из них доступны программам для проверки через sys.flags
.
sys_flags.py
import sys if sys.flags.bytes_warning: print('Warning on bytes/str errors') if sys.flags.debug: print('Debuging') if sys.flags.inspect: print('Will enter interactive mode after running') if sys.flags.optimize: print('Optimizing byte-code') if sys.flags.dont_write_bytecode: print('Not writing byte-code files') if sys.flags.no_site: print('Not importing "site"') if sys.flags.ignore_environment: print('Ignoring environment') if sys.flags.verbose: print('Verbose mode')
Поэкспериментируйте с sys_flags.py
, чтобы узнать, как параметры командной строки сопоставляются с настройками флагов.
$ python3 -S -E -b sys_flags.py Warning on bytes/str errors Not importing "site" Ignoring environment
Unicode по умолчанию
Чтобы получить имя кодировки Unicode по умолчанию, которую использует интерпретатор, вызовите getdefaultencoding ()
. Значение устанавливается при запуске и не может быть изменено.
Внутренняя кодировка по умолчанию и кодировка файловой системы могут отличаться для некоторых операционных систем, поэтому есть отдельный способ получить настройки файловой системы. getfilesystemencoding ()
возвращает значение ОС ( не файловой системы).
sys_unicode.py
import sys print('Default encoding :', sys.getdefaultencoding()) print('File system encoding :', sys.getfilesystemencoding())
Вместо того, чтобы полагаться на глобальную кодировку по умолчанию, большинство экспертов по Unicode рекомендуют сделать приложение явно поддерживающим Unicode. Это дает два преимущества: различные кодировки Unicode для разных источников данных могут обрабатываться более чисто, а количество предположений о кодировках в коде приложения сокращается.
$ python3 sys_unicode.py Default encoding : utf-8 File system encoding : utf-8
Интерактивные подсказки
Интерактивный интерпретатор использует два отдельных приглашения для указания уровня ввода по умолчанию ( ps1
) и «продолжения» многострочного оператора ( ps2
). Значения используются только интерактивным интерпретатором.
>>> import sys >>> sys.ps1 '>>> ' >>> sys.ps2 '... ' >>>
Любую или обе подсказки можно изменить на другую строку.
>>> sys.ps1 = '::: ' ::: sys.ps2 = '~~~ ' ::: for i in range(3): ~~~ print i ~~~ 0 1 2 :::
В качестве альтернативы для приглашения можно использовать любой объект, который можно преобразовать в строку (через __str__
).
sys_ps1.py
import sys class LineCounter: def __init__(self): self.count 0 def __str__(self): self.count 1 return '({:3d})> '.format(self.count)
LineCounter
отслеживает, сколько раз он был использован, поэтому число в приглашении увеличивается каждый раз.
$ python Python 3.4.2 (v3.4.2:ab2c023a9432, Oct 5 2014, 20:42:22) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from sys_ps1 import LineCounter >>> import sys >>> sys.ps1 = LineCounter() ( 1)> ( 2)> ( 3)>
Крючок для дисплея
sys.displayhook
вызывается интерактивным интерпретатором каждый раз, когда пользователь вводит выражение. Результат вычисления выражения передается функции как единственный аргумент.
sys_displayhook.py
import sys class ExpressionCounter: def __init__(self): self.count 0 self.previous_value self def __call__(self, value): print() print(' Previous:', self.previous_value) print(' New :', value) print() if value self.previous_value: self.count 1 sys.ps1 '({:3d})> '.format(self.count) self.previous_value value sys.__displayhook__(value) print('installing') sys.displayhook ExpressionCounter()
Значение по умолчанию (сохраненное в sys .__ displayhook__
) выводит результат на стандартный вывод и сохраняет его в _
для удобства использования позже.
$ python3 Python 3.4.2 (v3.4.2:ab2c023a9432, Oct 5 2014, 20:42:22) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sys_displayhook installing >>> 1 + 2 Previous:New : 3 3 ( 1)> 'abc' Previous: 3 New : abc 'abc' ( 2)> 'abc' Previous: abc New : abc 'abc' ( 2)> 'abc' * 3 Previous: abc New : abcabcabc 'abcabcabc' ( 3)>
Установить местоположение
Путь к реальной программе интерпретатора доступен в sys.executable
во всех системах, для которых имеет смысл иметь путь к интерпретатору. Это может быть полезно для обеспечения использования правильного интерпретатора, а также дает подсказки о путях, которые могут быть установлены на основе местоположения интерпретатора.
sys.prefix
относится к родительскому каталогу установки интерпретатора. Обычно он включает каталоги bin
и lib
для исполняемых файлов и установленных модулей соответственно.
sys_locations.py
import sys print('Interpreter executable:') print(sys.executable) print('\nInstallation prefix:') print(sys.prefix)
Этот пример вывода был получен на Mac, на котором запущена сборка фреймворка, установленная с python.org.
$ python3 sys_locations.py Interpreter executable: /Library/Frameworks/Python.framework/Versions/3.5/bin/python3 Installation prefix: /Library/Frameworks/Python.framework/Versions/3.5