Python: программная компиляция пакета Python в файлы pyc или pyo - PullRequest
7 голосов
/ 26 апреля 2011

Это для моего набора тестов.

У меня есть автоматически сгенерированный пакет Python во временной папке. Это все .py файлы. Я хочу программно скомпилировать их в (a) .pyc и (b) .pyo файлы. (Один тест выполнит .pyc, другой - .pyo.) Конечно, это следует делать с активным переводчиком. Я не хочу импортировать модули, просто скомпилируйте.

Как я могу это сделать?

Ответы [ 4 ]

10 голосов
/ 26 апреля 2011

В вашем каталоге Python lib будет скрипт с именем compileall.py (например, /usr/lib/python2.6/compileall.py).

В вашем коде spawn (например, с помощью os.spawnl) вызывает compileall.py указал на каталог, содержащий ваш сгенерированный код.Если вы вызовете его, используя python -O, он сгенерирует .pyo файлов;если вы вызываете его, используя python, он сгенерирует файл .pyc.

Я полагаю, хитрость заключается в том, чтобы вызвать правильную версию интерпретатора Python.

compileall.pyиспользует py_compile под капотом.

2 голосов
/ 26 апреля 2011

Возможно, вы захотите взглянуть на модуль py_compile. К сожалению, он не позволит вам выбрать между pyo и pyc.

1 голос
/ 26 апреля 2011

Обратите внимание, что при наличии разрешения на запись в каталог, из которого импортируется модуль python (* .py), будет сохранен файл * .pyc с тем же именем.Более того, * .pyc и * .pyo не не повышают производительность программы, кроме уменьшенного времени загрузки модулей.

0 голосов
/ 20 сентября 2017

выбор между .pyo и pyc возможен с py_compile

import py_compile

скомпилировать как простой байт-код:

py_compile.compile ('sourcefilename.py', 'destinationfilename.pyc', doraise = True)

скомпилировать как оптимизированный байт-код: и '-o', и '-oo' могут быть переданы в качестве параметров

py_compile.compile ('sourcefilename.py', 'destinationfilename.pyo', '- oo', doraise = True)

Я пытался использовать Python 2.7, и он работает только при передаче всех параметров.

...