Форум сайта python.su
Стало интересно, что это за файлы. Я так понимаю - это некий байт-код для питоновского интерпретатора, что-то вроде .msi в .NET. А не знает ли кто, где можно почитать про анотомию этих файлов, формат, каким образом получается этот самый байт-код. Или это секрет разработчиков интерпретатора?
В общем если у кого есть что-нибудь интересное по данной теме - поделитесь плиз или дайте ссылку. Заранее всем спасибо :)
Офлайн
начнем с того, что msi - это инсталлятор, в первую голову. Из аналогов в Питоне - egg. Хоть и структура/способы работы с ним далеко не так кошмарны, как с msi.
pyc/pyo - только байткод. pyo - с оптимизацией (реально ничего не дает, только докстринги режутся, как я помню. Интрерпретатору приходится так и так одинаково трудиться)
Когда импортим модуль - получаем объект. Если его пропустить через стандартный marshal и прибавить в начале магический код (константа, определяющая тип файла) - получим pyc. Может я что-то и забыл, но это, ИМХО, несущественно. По крайней мере в работе никогда не понадобилось.
Где-то видел (возможно, даже сдесь) более подробное описание со ссылками на исходники Питона.
Офлайн
http://crchemist.wmn.cc/?p=9
http://crchemist.wmn.cc/?p=11
http://crchemist.wmn.cc/?p=12
Отредактировано (Июнь 20, 2007 14:41:36)
Офлайн
Андрей СветловНеправда. При выполнении pyo внутренняя переменная интерпретатора __debug__ устанавливается в 0.
pyc/pyo - только байткод. pyo - с оптимизацией (реально ничего не дает, только докстринги режутся, как я помню. Интрерпретатору приходится так и так одинаково трудиться)
Отредактировано (Июнь 20, 2007 16:21:51)
Офлайн
Да, точно. Но на скорость исполнения это практически не влияет. Другое дело, если o2 в С++ компиляторе включишь!
Офлайн
bialixЗапускаю python -OO file | python -O file но pyc/pyo не появляются. Или их в другом месте появляются?Андрей СветловНеправда. При выполнении pyo внутренняя переменная интерпретатора __debug__ устанавливается в 0.
pyc/pyo - только байткод. pyo - с оптимизацией (реально ничего не дает, только докстринги режутся, как я помню. Интрерпретатору приходится так и так одинаково трудиться)
Эта переменная используется в операторе assert. Так что можно считать что в pyo отсутствуют assert.
pyo получаются при запуске python -O или python -OO. Но! Докстринги режутся только при выполнении python -OO. Поэтому pyo может содержать, а может и не содержать докстринги.
Офлайн
AndreyKSpyc/pyo файлы создаются только для импортируемых модулей/библиотек и никогда для выполняемого скрипта.bialixЗапускаю python -OO file | python -O file но pyc/pyo не появляются. Или их в другом месте появляются?Андрей СветловНеправда. При выполнении pyo внутренняя переменная интерпретатора __debug__ устанавливается в 0.
pyc/pyo - только байткод. pyo - с оптимизацией (реально ничего не дает, только докстринги режутся, как я помню. Интрерпретатору приходится так и так одинаково трудиться)
Эта переменная используется в операторе assert. Так что можно считать что в pyo отсутствуют assert.
pyo получаются при запуске python -O или python -OO. Но! Докстринги режутся только при выполнении python -OO. Поэтому pyo может содержать, а может и не содержать докстринги.
Офлайн
Murr_vkДумаю, ты имел ввиду MSIL (Microsoft Intermediate Language), а не .msi?
Я так понимаю - это некий байт-код для питоновского интерпретатора, что-то вроде .msi в .NET.
Офлайн
bialix, а можно “откомпилировать” сам скрипт? Например, чтобы не показывать исходник?
Офлайн
Mr.Floppyможно, но питоновский байт-код декомпилируется на раз-два по многочисленным утверждениям опытных товарищей. так что как написано в книге Core Python Programming для особо секретных частей писать сишные (или Pyrex-ные – это от меня совет) расширения. А сам главный скрипт пистатьчто-то вроде:
bialix, а можно “откомпилировать” сам скрипт? Например, чтобы не показывать исходник?
Офлайн