Python: программная компиляция пакета Python в файлы pyc или pyo
Это для моего набора тестов.
у меня есть автоматически сгенерированный пакет Python во временной папке. Это все .py
файлы. Я хочу программно скомпилировать их в (а) .pyc
и (b).pyo
файлы. (Один тест сделает .pyc
, другой будет делать .pyo
.) Это должно быть сделано с активным переводчиком, конечно. Я не хочу импортировать модули, просто скомпилируйте.
как я могу это сделать?
4 ответов
в вашем каталоге Python lib будет скрипт под названием compileall.py
(например, /usr/lib/python2.6/compileall.py
).
в вашем коде, spawn (например, с помощью os.spawnl
) вызов compileall.py
указал на каталог, содержащий сгенерированный вами код. Если вы вызываете его с помощью python -O
он будет генерировать .pyo
файлы; если вы вызываете его с помощью python
он будет генерировать .
трюк, я полагаю, будет заключаться в вызове с правильной версией Python переводчик.
compileall.py
использует py_compile
под капотом.
возможно, вы захотите взглянуть на py_compile
модуль. К сожалению, это не позволит вам выбрать между pyo
и pyc
.
обратите внимание, что пока есть разрешение на запись в каталоге, из которого модуль python (*.py) импортируется,*.файл pyc с тем же именем будет упакован. Кроме того.* ,pyc и *.Пе не добавить любой производительности для программы, за исключением decreaed время загрузки модулей.
выбирал между .pyo и pyc возможны с помощью py_compile
импорт py_compile
скомпилировать как простой байт-код:
py_compile.compile('sourcefilename.py', ' destinationfilename.пыць', doraise=True)
compile как оптимизированный байт-код: оба '- o' и '- oo ' могут быть переданы в качестве параметров
py_compile.compile('sourcefilename.py', ' destinationfilename.pyo', '- oo', doraise=True )
Я пробовал с python 2.7, и он работает только тогда, когда вы передаете все параметры.