<假设: 应用程序启动时间非常关键; 我的应用程序经常启动; 我的应用程序运行在一个导入速度比平时慢的环境中; 有许多文件需要导入; 并且不能编译为 .pyc 文件。>
我想把定义一组模块的所有Python源文件连接成一个新的Python源文件。
我希望导入新文件的结果与导入原始文件中的一个文件相同 (然后原始文件将导入更多的原始文件,以此类推)。
这是否可行?
下面是对工具输入 'bar' 和 'baz' 模块源文件的粗略手动模拟,这样的工具在部署代码之前运行。
我希望导入新文件的结果与导入原始文件中的一个文件相同 (然后原始文件将导入更多的原始文件,以此类推)。
这是否可行?
下面是对工具输入 'bar' 和 'baz' 模块源文件的粗略手动模拟,这样的工具在部署代码之前运行。
__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请求的延迟会影响性能。在Python的情况下,启动时导入数百个Python源文件的延迟会影响性能。