Что означают расширения файлов Python, .pyc .pyd .pyo?

436

Что означают эти расширения файлов Python?

  • .pyc
  • .pyd
  • .pyo

Каковы различия между ними и как они генерируются из файла * .py?

Янки Твиззи
источник

Ответы:

481
  1. .pyОбычно это исходный код, который вы написали.
  2. .pyc: Это скомпилированный байт-код. Если вы импортируете модуль, python создаст *.pycфайл, который содержит байт-код, чтобы впоследствии облегчить (и быстрее) его импорт.
  3. .pyo: Это был формат файла, который использовался до Python 3.5 для *.pycфайлов, которые были созданы с -Oфлагом optimizations ( ). (см. примечание ниже)
  4. .pyd: Это в основном файл Windows DLL. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

Также для дальнейшего обсуждения .pycvs .pyo, посмотрите на: http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html (я скопировал важную часть ниже)

  • Когда интерпретатор Python вызывается с флагом -O, оптимизированный код генерируется и сохраняется в файлах .pyo. В настоящее время оптимизатор мало помогает; он только удаляет утверждения assert. Когда используется -O, весь байт-код оптимизируется; Файлы .pyc игнорируются, а файлы .py компилируются в оптимизированный байт-код.
  • Передача двух флагов -O интерпретатору Python (-OO) заставит компилятор байт-кода выполнить оптимизацию, которая в некоторых редких случаях может привести к сбоям в работе программ. В настоящее время __doc__из байт-кода удаляются только строки, что приводит к более компактным файлам .pyo. Поскольку некоторые программы могут полагаться на то, что они доступны, вам следует использовать эту опцию, только если вы знаете, что делаете.
  • Программа не запускается быстрее при чтении из файла .pyc или .pyo, чем при чтении из файла .py; в файлах «.pyc» или «.pyo» быстрее всего скорость загрузки.
  • Когда сценарий запускается путем указания его имени в командной строке, байт-код сценария никогда не записывается в файл «.pyc» или «.pyo». Таким образом, время запуска скрипта может быть уменьшено за счет перемещения большей части его кода в модуль и наличия небольшого загрузочного скрипта, который импортирует этот модуль. Можно также назвать файл «.pyc» или «.pyo» непосредственно в командной строке.

Замечания:

В 2015-09-15 выпуск Python 3.5 внедрил PEP-488 и удалил .pyoфайлы. Это означает, что .pycфайлы представляют как неоптимизированный, так и оптимизированный байт-код.

Билл Линч
источник
2
Файлы dll генерируются из сценариев python или сценариев c / c ++?
Янки Твиззи
1
@yankitwizzy: Да. Они должны быть сгенерированы из кода C / C ++. Файл должен быть в машинном коде, поэтому он не может быть напрямую из Python.
Билл Линч
«В настоящее время оптимизатор мало помогает, он только удаляет утверждения assert». Ты уверен насчет этого? Попробуйтеdef f(x): assert(x**5 == x*x*x*x*x); return x; import timeit; print(timeit.repeat("for x in range(100): f(x)", "from __main__ import f", number=10000));
Хорхе Лейтао
@ JCLeitão: я уверен в чем? Не могли бы вы объяснить, что, по вашему мнению, показывает ваш пример, а не просто добавить код в комментарии?
Билл Линч
9
Обратите внимание , что в Python 3.5 , PEP 488 реализуется, которая покончила с концепцией .pyoфайлов. Даже оптимизированный байт-код заканчивается .pycрасширением Python 3.5.
Майкл Керри
229
  • .py - Обычный скрипт
  • .py3 - (редко используется) скрипт Python3. Скрипты Python3 обычно заканчиваются на «.py», а не «.py3», но я видел это несколько раз
  • .pyc - скомпилированный скрипт (байт-код)
  • .pyo - оптимизированный файл pyc (Начиная с Python3.5, Python будет использовать только pyc, а не pyo и pyc)
  • .pyw - скрипт Python для запуска в оконном режиме без консоли; выполняется с pythonw.exe
  • .pyx - Cython src для преобразования в C / C ++
  • .pyd - скрипт Python, сделанный как Windows DLL
  • .pxd - скрипт Cython, который эквивалентен заголовку C / C ++
  • .pxi - заглушка MyPy
  • .pyi - файл- заглушка ( PEP 484 )
  • .pyz - архив скриптов Python ( PEP 441 ); это скрипт, содержащий сжатые скрипты Python (ZIP) в двоичной форме после стандартного заголовка скрипта Python
  • .pywz - архив скриптов Python для MS-Windows ( PEP 441 ); это скрипт, содержащий сжатые скрипты Python (ZIP) в двоичной форме после стандартного заголовка скрипта Python
  • .py [cod] - подстановочный знак в «.gitignore», который означает, что файл может быть «.pyc», «.pyo» или «.pyd».
  • .pth - файл конфигурации пути; его содержимое - это дополнительные элементы (по одному на строку), которые нужно добавить sys.path. Смотрите siteмодуль.

Большой список дополнительных расширений файлов Python (в основном редких и неофициальных) можно найти по адресу http://dcjtech.info/topic/python-file-extensions/

Девин Кольер Джонсон
источник
11
Следует отметить, что файл «.pyx» - это не совсем исходный код Python, который конвертируется в C, а скорее исходный код Cython (то есть: ожидающий преобразования в C)
Фред Остеррат,
Что означает «Я» в расширении PYI? «Включить» / «Реализация» / «Интерфейс»?
ChrisFreeman
1
.pyw означает PYthon-скрипт, который создает Windows, а не Python 4 Windows. .pyw может быть выполнен под * nix
Kotauskas
1
В общем случае .pyw - это скрипт для запуска в оконном режиме, т.е. без вывода на консоль. Как утверждает @VladislavToncharov, их можно запускать на большинстве платформ, поддерживающих python, если он установлен .
Стив Барнс
1
Этот ответ должен обсуждать .pthфайлы.
Вим