Модуль sys
Модуль sys обеспечивает доступ к некоторым переменным и функциям, взаимодействующим с интерпретатором python.
sys.argv — список аргументов командной строки, передаваемых сценарию Python. sys.argv[0] является именем скрипта (пустой строкой в интерактивной оболочке).
sys.byteorder — порядок байтов. Будет иметь значение ‘big’ при порядке следования битов от старшего к младшему, и ‘little’, если наоборот (младший байт первый).
sys.builtin_module_names — кортеж строк, содержащий имена всех доступных модулей.
sys.call_tracing(функция, аргументы) — вызывает функцию с аргументами и включенной трассировкой, в то время как трассировка включена.
sys.copyright — строка, содержащая авторские права, относящиеся к интерпретатору Python.
sys._clear_type_cache() — очищает внутренний кэш типа.
sys._current_frames() — возвращает словарь-отображение идентификатора для каждого потока в верхнем кадре стека в настоящее время в этом потоке в момент вызова функции.
sys.dllhandle — целое число, определяющее дескриптор DLL Python (Windows).
sys.exc_info() — возвращает кортеж из трех значений, которые дают информацию об исключениях, обрабатывающихся в данный момент.
sys.exec_prefix — каталог установки Python.
sys.executable — путь к интерпретатору Python.
sys.exit([arg]) — выход из Python. Возбуждает исключение SystemExit, которое может быть перехвачено.
sys.flags — флаги командной строки. Атрибуты только для чтения.
sys.float_info — информация о типе данных float.
sys.float_repr_style — информация о применении встроенной функции repr() для типа float.
sys.getdefaultencoding() — возвращает используемую кодировку.
sys.getdlopenflags() — значения флагов для вызовов dlopen().
sys.getfilesystemencoding() — возвращает кодировку файловой системы.
sys.getrefcount(object) — возвращает количество ссылок на объект. Аргумент функции getrefcount — еще одна ссылка на объект.
sys.getrecursionlimit() — возвращает лимит рекурсии.
sys.getsizeof(object[, default]) — возвращает размер объекта (в байтах).
sys.getswitchinterval() — интервал переключения потоков.
sys.getwindowsversion() — возвращает кортеж, описывающий версию Windows.
sys.hash_info — информация о параметрах хэширования.
sys.hexversion — версия python как шестнадцатеричное число (для 3.2.2 final это будет 30202f0).
sys.implementation — объект, содержащий информацию о запущенном интерпретаторе python.
sys.int_info — информация о типе int.
sys.intern(строка) — возвращает интернированную строку.
sys.last_type, sys.last_value, sys.last_traceback — информация об обрабатываемых исключениях. По смыслу похоже на sys.exc_info().
sys.maxsize — максимальное значение числа типа Py_ssize_t (2 31 на 32-битных и 2 63 на 64-битных платформах).
sys.maxunicode — максимальное число бит для хранения символа Unicode.
sys.modules — словарь имен загруженных модулей. Изменяем, поэтому можно позабавиться 🙂
sys.path — список путей поиска модулей.
sys.path_importer_cache — словарь-кэш для поиска объектов.
sys.platform — информация об операционной системе.
Linux (2.x and 3.x) | ‘linux’ |
Windows | ‘win32’ |
Windows/Cygwin | ‘cygwin’ |
Mac OS X | ‘darwin’ |
OS/2 | ‘os2’ |
OS/2 EMX | ‘os2emx’ |
sys.prefix — папка установки интерпретатора python.
sys.ps1, sys.ps2 — первичное и вторичное приглашение интерпретатора (определены только если интерпретатор находится в интерактивном режиме). По умолчанию sys.ps1 == «>>> «, а sys.ps2 == «. «.
sys.dont_write_bytecode — если true, python не будет писать .pyc файлы.
sys.setdlopenflags(flags) — установить значения флагов для вызовов dlopen().
sys.setrecursionlimit(предел) — установить максимальную глубину рекурсии.
sys.setswitchinterval(интервал) — установить интервал переключения потоков.
sys.settrace(tracefunc) — установить «след» функции.
sys.stdin — стандартный ввод.
sys.stdout — стандартный вывод.
sys.stderr — стандартный поток ошибок.
sys.__stdin__, sys.__stdout__, sys.__stderr__ — исходные значения потоков ввода, вывода и ошибок.
sys.tracebacklimit — максимальное число уровней отслеживания.
sys.version — версия python.
sys.api_version — версия C API.
sys.version_info — Кортеж, содержащий пять компонентов номера версии.
sys.warnoptions — реализация предупреждений.
sys.winver — номер версии python, использующийся для формирования реестра Windows.
Если что-то пропустил (а я вполне мог это сделать), прошу в комментарии 🙂
Модуль sys, параметры конфигурации в Python.
Модуль sys обеспечивает доступ к некоторым переменным, используемым или поддерживаемым интерпретатором и к функциям, которые тесно связаны с интерпретатором. Эти переменные и функции всегда доступны и позволяют менять конфигурацию интерпретатора во время выполнения, а так же взаимодействовать с операционной системой за пределами выполняемой программы.
События аудита CPython.
Функция sys.audit() вызывает событие аудита с любыми активными хуками. Функция sys.addaudithook() добавляет вызываемый хук/перехват в список активных хуков аудита для текущего интерпретатора.
Функция argv модуля sys в Python.
Функция argv модуля sys возвращает список аргументов командной строки, передаваемых скрипту Python. Выражение argv[0] — это имя скрипта и зависит от операционной системы, является ли это полный путь или нет.
Имя используемой OS в Python.
`sys.platform` возвращает строку, которая содержит идентификатор платформы. Функция `sys.getwindowsversion()` возвращает именованный кортеж, описывающий версию Windows.
Различные сведения о версии Python.
Авторские права, относящиеся к интерпретатору Python. Номер версии интерпретатора Python. Версия API языка `C` для интерпретатора Python. Информация о реализации текущего работающего интерпретатора Python
Каталоги и пути интерпретатора Python.
sys.exec_prefix — каталог установки Python. sys.executable — путь к интерпретатору Python. sys.prefix — папка установки интерпретатора python.
Кодировка, используемая Python.
Функция `sys.getdefaultencoding()` возвращает имя текущей кодировки по умолчанию. Функция `sys.getfilesystemencoding()` возвращает имя кодировки преобразования между именами файлов. Функция `sys.getfilesystemencodeerrors()` режим ошибки преобразования между именами файлов
Настройка рекурсии в Python.
Функция `sys.getrecursionlimit()` возвращает текущее значение предела рекурсии. Функция `sys.setrecursionlimit()` устанавливает максимальную глубину стека интерпретатора Python для ограничения.
Функции трассировки и профилирования кода модуля sys в Python.
Управление трассировкой из кода Python и извлечение отладочной информации, профилирование кода.
Функция breakpointhook() модуля sys в Python.
По умолчанию sys.breakpointhook() подключает отладчик pdb, но его можно настроить на любую другую функцию, чтобы можно было выбрать, какой отладчик использовать.
Объекты stdin, stdout, stderr модуля sys в Python.
sys.stdin — используется для всех интерактивных входных данных, включая вызовы input().sys.stdout — используется для вывода оператором print() и выражений, которые возвращают значение, а также для подсказок input(). sys.stderr — сообщения об ошибках и собственные запросы переводчика.
Функции excepthook() и exc_info() модуля sys в Python.
Когда возникает исключение и не обрабатывается, интерпретатор вызывает sys.excepthook с тремя аргументами, классом исключения, экземпляром исключения и объектом трассировки. Возвращаемое значение sys.exc_info() представляет собой кортеж из трех членов, содержащий класс исключения, экземпляр иск
Функция getrefcount() модуля sys в Python.
Функция `getrefcount()` модуля `sys` возвращает счетчик ссылок объекта.
Атрибуты path и path_hooks модуля sys в Python.
Атрибут sys.path содержит список строк, который указывает путь поиска для модулей. Атрибут sys.path_hooks содержит список вызываемых объектов, которые принимают аргумент пути, чтобы попытаться создать искатель для пути.
Список загруженных и скомпилированных модулей в Python.
Атрибут `sys.modules` представляет собой словарь, который отображает имена модулей на модули, которые уже были загружены.
Атрибут float_info модуля sys в Python.
Атрибут `float_info` модуля `sys` представляет собой именованный кортеж, содержащий информацию о типе `float`.
Атрибут int_info модуля sys в Python.
Атрибут `int_info` модуля `sys` представляет собой именованный кортеж, который содержит информацию о внутреннем представлении Python целых чисел.
Атрибут maxsize модуля sys в Python.
Атрибут maxsize модуля sys представляет собой целое число, дающее максимальное значение, которое может принимать переменная типа `Py_ssize_t`. Обычно это `32 ** 31-1` на 32-битной платформе и `2 ** 63-1` на 64-битной платформе.
Атрибут byteorder модуля sys в Python.
Атрибут `byteorder` модуля `sys` представляет собой индикатор собственного порядка байтов.
Функция exit() модуля sys в Python.
`sys.exit()` — это быстрый способ выйти из программы при возникновении ошибки. Она реализуется путем вызова [исключения `SystemExit`][base-children], поэтому выполняются действия по очистке, указанные в предложениях `finally` операторов `try` и можно перехватить попытку выхода на внешнем уровне.
Функция getsizeof() модуля sys в Python.
Функция `getsizeof()` модуля `sys` возвращает размер объекта `object` в байтах. Объект может быть любым типом объекта. Учитывается только потребление памяти, непосредственно приписываемое объекту, а не потребление памяти объектами, к которым он относится.
Атрибут dont_write_bytecode модуля sys в Python.
Если атрибут `dont_write_bytecode` модуля `sys` равен `True`, то Python не будет пытаться записывать файлы `.pyc` при импорте исходных модулей. Этот атрибут можно установить самостоятельно их кода Python для управления генерацией файла байт-кода.
Функция warnoptions() модуля sys в Python.
Функция `warnoptions()` модуля `sys` возвращает список аргументов параметра командной строки `-W`, полученного интерпретатором.
Как работают импорты в Python
Порой бывает трудно правильно реализовать import с первого раза, особенно если мы хотим добиться правильной работы на плохо совместимых между собой версиях Python 2 и Python 3. Попытаемся разобраться, что из себя представляют импорты в Python и как написать решение, которое подойдёт под обе версии языка.
Содержание
Ключевые моменты
- Выражения import производят поиск по списку путей в sys.path .
- sys.path всегда включает в себя путь скрипта, запущенного из командной строки, и не зависит от текущей рабочей директории.
- Импортирование пакета по сути равноценно импортированию __init__.py этого пакета.
Основные определения
- Модуль: любой файл *.py . Имя модуля — имя этого файла.
- Встроенный модуль: «модуль», который был написан на Си, скомпилирован и встроен в интерпретатор Python, и потому не имеет файла *.py .
- Пакет: любая папка, которая содержит файл __init__.py . Имя пакета — имя папки.
- С версии Python 3.3 любая папка (даже без __init__.py ) считается пакетом.
- Объект: в Python почти всё является объектом — функции, классы, переменные и т. д.
Пример структуры директорий
Обратите внимание, что в корневой папке test/ нет файла __init__.py .
Что делает import
При импорте модуля Python выполняет весь код в нём. При импорте пакета Python выполняет код в файле пакета __init__.py , если такой имеется. Все объекты, определённые в модуле или __init__.py , становятся доступны импортирующему.
Основы import и sys.path
Вот как оператор import производит поиск нужного модуля или пакета согласно документации Python:
При импорте модуля spam интерпретатор сначала ищёт встроенный модуль с таким именем. Если такого модуля нет, то идёт поиск файла spam.py в списке директорий, определённых в переменной sys.path . sys.path инициализируется из следующих мест:
- директории, содержащей исходный скрипт (или текущей директории, если файл не указан);
- директории по умолчанию, которая зависит от дистрибутива Python;
- PYTHONPATH (список имён директорий; имеет синтаксис, аналогичный переменной окружения PATH ).
Программы могут изменять переменную sys.path после её инициализации. Директория, содержащая запускаемый скрипт, помещается в начало поиска перед путём к стандартной библиотеке. Это значит, что скрипты в этой директории будут импортированы вместо модулей с такими же именами в стандартной библиотеке.
Технически документация не совсем полна. Интерпретатор будет искать не только файл (модуль) spam.py , но и папку (пакет) spam .
Обратите внимание, что Python сначала производит поиск среди встроенных модулей — тех, которые встроены непосредственно в интерпретатор. Список встроенных модулей зависит от дистрибутива Python, а найти этот список можно в sys.builtin_module_names (Python 2 и Python 3). Обычно в дистрибутивах есть модули sys (всегда включён в дистрибутив), math , itertools , time и прочие.
В отличие от встроенных модулей, которые при поиске проверяются первыми, остальные (не встроенные) модули стандартной библиотеки проверяются после директории запущенного скрипта. Это приводит к сбивающему с толку поведению: возможно «заменить» некоторые, но не все модули стандартной библиотеки. Допустим, модуль math является встроенным модулем, а random — нет. Таким образом, import math в start.py импортирует модуль из стандартной библиотеки, а не наш файл math.py из той же директории. В то же время, import random в start.py импортирует наш файл random.py .
12–25 апреля, Онлайн, Беcплатно
Кроме того, импорты в Python регистрозависимы: import Spam и import spam — разные вещи.
Функцию pkgutil.iter_modules() (Python 2 и Python 3) можно использовать, чтобы получить список всех модулей, которые можно импортировать из заданного пути:
Чуть подробнее о sys.path
Чтобы увидеть содержимое sys.path , запустите этот код:
Документация Python описывает sys.path так:
Список строк, указывающих пути для поиска модулей. Инициализируется из переменной окружения PYTHONPATH и директории по умолчанию, которая зависит от дистрибутива Python.
При запуске программы после инициализации первым элементом этого списка, path[0] , будет директория, содержащая скрипт, который был использован для вызова интерпретатора Python. Если директория скрипта недоступна (например, если интерпретатор был вызван в интерактивном режиме или скрипт считывается из стандартного ввода), то path[0] является пустой строкой. Из-за этого Python сначала ищет модули в текущей директории. Обратите внимание, что директория скрипта вставляется перед путями, взятыми из PYTHONPATH .
Документация к интерфейсу командной строки Python добавляет информацию о запуске скриптов из командной строки. В частности, при запуске python