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, и он работает только тогда, когда вы передаете все параметры.