У нас есть продукт Python 2, который мы публикуем как RPM. RPM включают только файлы pyo / pyc, а запущенные сценарии ссылаются на определенные файлы pyo для запуска продукта. Мы используем setuptools для упаковки этих RPM:
python setup.py bdist_rpm --release=... --requires=... --bdist-base=...
Теперь мы переносим продукт на Python 3.6 и обнаружили, что файлы pyc больше не находятся в том же месте , что и файлы py,Они расположены в папке __pycache__ в папке файлов py и, более того, они не будут работать, если соответствующий файл py не существует. В прежнем поведении все еще есть поддержка, если pyc-файл заменяет py-файл и отсутствует в __pycache __.
Документация показывает, что компиляция python может принимать флаг -b, который:
Записать файлы байт-кода в их прежние местоположения и имена, которые могут перезаписывать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в их местоположения и имена PEP 3147, что позволяет сосуществовать файлам байт-кода из нескольких версий Python.
Однако, поскольку мы используем setuptools, мы не контролируем компиляциюкомандная строка.
Вопросы:
- Есть ли способ заставить setuptools скомпилировать код с флагом -b и сохранить прежнее расположение файлов pyc?
- Есть ли лучший способ в Python 3 публиковать RPM без исходного кода и при этом иметь возможность вызывать файл pyc из скрипта?