是否可以预编译整个python包?

时间:2011-11-28 19:23:42

标签: python

我们有一个重要的〜(50kloc)包/模块树(大约2200个文件),我们将每个作业运送到我们的集群。这些工作运行了大约12个小时,所以解开/引导(即解析每个模块的PYTHONPATH)的开销通常不是什么大问题。但是,随着我们的工作节点中的核心数量的增加,我们越来越多地遇到调度程序将同时占用12个作业的情况,这将使不良的临时驱动器停止服务所有请求(更糟糕的是,原因在我们无法控制的情况下,每个作业都需要一个单独的环回文件系统,因此驱动器上有2层间接。)

有没有办法提示解释器每个文件的正确位置(没有用遍布的路径装饰代码(可能覆盖导入?))或将所有相关的.pyc文件捆绑成某种二进制blob可以只读一次吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

我们的群集上有这样的问题。 (Lustre文件系统对于元数据操作来说很慢。)我们的解决方案是使用Python中的“zip import”工具。

在我们的例子中,我们制作了stdlib的单个zip(放在sys.path中已经给出的名称中,如“/usr/lib/python26.zip”)和我们项目的另一个zip,后者添加到PYTHONPATH。

这要快得多,因为它是一个单独的文件系统元数据读取,然后读取内容列表的快速zip文件,以找出内部的内容,并缓存以供以后查找。