Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Июнь 19, 2007 23:36:07

Murr_vk
От:
Зарегистрирован: 2007-05-22
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

*.pyc, *.pyo

Стало интересно, что это за файлы. Я так понимаю - это некий байт-код для питоновского интерпретатора, что-то вроде .msi в .NET. А не знает ли кто, где можно почитать про анотомию этих файлов, формат, каким образом получается этот самый байт-код. Или это секрет разработчиков интерпретатора?

В общем если у кого есть что-нибудь интересное по данной теме - поделитесь плиз или дайте ссылку. Заранее всем спасибо :)



Офлайн

#2 Июнь 20, 2007 01:53:04

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

*.pyc, *.pyo

начнем с того, что msi - это инсталлятор, в первую голову. Из аналогов в Питоне - egg. Хоть и структура/способы работы с ним далеко не так кошмарны, как с msi.
pyc/pyo - только байткод. pyo - с оптимизацией (реально ничего не дает, только докстринги режутся, как я помню. Интрерпретатору приходится так и так одинаково трудиться)
Когда импортим модуль - получаем объект. Если его пропустить через стандартный marshal и прибавить в начале магический код (константа, определяющая тип файла) - получим pyc. Может я что-то и забыл, но это, ИМХО, несущественно. По крайней мере в работе никогда не понадобилось.
Где-то видел (возможно, даже сдесь) более подробное описание со ссылками на исходники Питона.



Офлайн

#3 Июнь 20, 2007 14:40:39

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

*.pyc, *.pyo

http://crchemist.wmn.cc/?p=9
http://crchemist.wmn.cc/?p=11
http://crchemist.wmn.cc/?p=12



Отредактировано (Июнь 20, 2007 14:41:36)

Офлайн

#4 Июнь 20, 2007 16:21:01

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

*.pyc, *.pyo

Андрей Светлов
pyc/pyo - только байткод. pyo - с оптимизацией (реально ничего не дает, только докстринги режутся, как я помню. Интрерпретатору приходится так и так одинаково трудиться)
Неправда. При выполнении pyo внутренняя переменная интерпретатора __debug__ устанавливается в 0.
Эта переменная используется в операторе assert. Так что можно считать что в pyo отсутствуют assert.

pyo получаются при запуске python -O или python -OO. Но! Докстринги режутся только при выполнении python -OO. Поэтому pyo может содержать, а может и не содержать докстринги.



Отредактировано (Июнь 20, 2007 16:21:51)

Офлайн

#5 Июнь 20, 2007 16:26:57

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

*.pyc, *.pyo

Да, точно. Но на скорость исполнения это практически не влияет. Другое дело, если o2 в С++ компиляторе включишь!



Офлайн

#6 Дек. 6, 2007 23:43:13

AndreyKS
От:
Зарегистрирован: 2007-10-26
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

*.pyc, *.pyo

bialix
Андрей Светлов
pyc/pyo - только байткод. pyo - с оптимизацией (реально ничего не дает, только докстринги режутся, как я помню. Интрерпретатору приходится так и так одинаково трудиться)
Неправда. При выполнении pyo внутренняя переменная интерпретатора __debug__ устанавливается в 0.
Эта переменная используется в операторе assert. Так что можно считать что в pyo отсутствуют assert.

pyo получаются при запуске python -O или python -OO. Но! Докстринги режутся только при выполнении python -OO. Поэтому pyo может содержать, а может и не содержать докстринги.
Запускаю python -OO file | python -O file но pyc/pyo не появляются. Или их в другом месте появляются?



Офлайн

#7 Дек. 7, 2007 00:32:28

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

*.pyc, *.pyo

AndreyKS
bialix
Андрей Светлов
pyc/pyo - только байткод. pyo - с оптимизацией (реально ничего не дает, только докстринги режутся, как я помню. Интрерпретатору приходится так и так одинаково трудиться)
Неправда. При выполнении pyo внутренняя переменная интерпретатора __debug__ устанавливается в 0.
Эта переменная используется в операторе assert. Так что можно считать что в pyo отсутствуют assert.

pyo получаются при запуске python -O или python -OO. Но! Докстринги режутся только при выполнении python -OO. Поэтому pyo может содержать, а может и не содержать докстринги.
Запускаю python -OO file | python -O file но pyc/pyo не появляются. Или их в другом месте появляются?
pyc/pyo файлы создаются только для импортируемых модулей/библиотек и никогда для выполняемого скрипта.



Офлайн

#8 Дек. 7, 2007 06:17:26

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

*.pyc, *.pyo

Murr_vk
Я так понимаю - это некий байт-код для питоновского интерпретатора, что-то вроде .msi в .NET.
Думаю, ты имел ввиду MSIL (Microsoft Intermediate Language), а не .msi?



Офлайн

#9 Дек. 7, 2007 20:52:14

Mr.Floppy
От:
Зарегистрирован: 2007-12-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

*.pyc, *.pyo

bialix, а можно “откомпилировать” сам скрипт? Например, чтобы не показывать исходник?



Офлайн

#10 Дек. 7, 2007 22:02:19

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

*.pyc, *.pyo

Mr.Floppy
bialix, а можно “откомпилировать” сам скрипт? Например, чтобы не показывать исходник?
можно, но питоновский байт-код декомпилируется на раз-два по многочисленным утверждениям опытных товарищей. так что как написано в книге Core Python Programming для особо секретных частей писать сишные (или Pyrex-ные – это от меня совет) расширения. А сам главный скрипт пистатьчто-то вроде:


from mylib import main
main()


тогда бояться показывать исходник не придется :-)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version