Как объединить несколько исходных файлов Python в один файл?
(Предположим, что: время запуска приложения абсолютно необходимо; мое приложение часто запускается; мое приложение работает в среде, в которой импорт выполняется медленнее, чем обычно; необходимо импортировать много файлов; и компиляция в.pyc
файлы недоступны.)
Я хотел бы объединить все исходные файлы Python, которые определяют набор модулей, в один новый исходный файл Python.
Я хотел бы, чтобы результат импорта нового файла был таким, как если бы я импортировал один из исходных файлов (который затем импортировал бы еще несколько исходных файлов и т. Д.).
Это возможно?
Вот грубая, ручная симуляция того, что инструмент может производить при подаче исходных файлов для модулей.бар' а также 'Базь, Вы должны запустить такой инструмент до развертывания кода.
__file__ = 'foo.py'
def _module(_name):
import types
mod = types.ModuleType(name)
mod.__file__ = __file__
sys.modules[module_name] = mod
return mod
def _bar_module():
def hello():
print 'Hello World! BAR'
mod = create_module('foo.bar')
mod.hello = hello
return mod
bar = _bar_module()
del _bar_module
def _baz_module():
def hello():
print 'Hello World! BAZ'
mod = create_module('foo.bar.baz')
mod.hello = hello
return mod
baz = _baz_module()
del _baz_module
И теперь вы можете:
from foo.bar import hello
hello()
Этот код нене принимать во внимание такие вещи, как операторы импорта и зависимости. Существует ли какой-либо существующий код, который будет собирать исходные файлы, используя эту или другую технику?
Эта идея очень похожа на инструменты, используемые для сборки и оптимизации файлов JavaScript перед отправкой в браузер, где задержка нескольких HTTP-запросов снижает производительность. В этом случае с Pythons задержка импорта сотен исходных файлов Python при запуске, что очень больно.