如何将具有依赖项的 python 脚本打包到 zip/tar 中?

Posted

技术标签:

【中文标题】如何将具有依赖项的 python 脚本打包到 zip/tar 中?【英文标题】:How to package python script with dependencies into zip/tar? 【发布时间】:2015-08-30 06:07:45 【问题描述】:

我有一个 hadoop 集群,我正在使用 Numpy、SciPy 和 Pandas 进行数据分析。我希望能够使用命令的“--file”参数以 zip/tar 文件的形式提交我的 hadoop 作业。该 zip 文件应该包含我的 python 程序需要执行的所有内容,这样无论我的脚本在集群中的哪个节点上执行,我都不会在运行时遇到 ImportError。

由于公司政策,在每个节点上安装这些库并不完全可行,尤其是对于探索性/敏捷开发。我确实安装了 pip 和 virtualenv 来根据需要创建沙箱。

我查看了zipimport 和python packaging,但这些似乎都不能满足我的需求/我在使用这些工具时遇到了困难。

有没有人幸运地做到了这一点?我似乎无法在网上找到任何成功案例。

谢谢!

【问题讨论】:

不确定这些特定的依赖关系,但 pex 非常适合创建一个文件:pex.readthedocs.org/en/latest 【参考方案1】:

我通过创建需要安装 python 库和 Spark 从脚本的 Docker 映像解决了 Apache Spark 和 Python 上下文中的类似问题。镜像分发到其他机器,当容器启动时它会自动加入集群,我们只有一个这样的镜像/主机。

我们不断变化的 python 项目与作业一起作为 zip 文件提交,并且从那里透明地导入工作。幸运的是,我们很少需要重新创建那些从属图像,而且我们不会运行具有冲突要求的作业。

我不确定这在您的场景中是否适用,尤其是因为(在我的理解中)必须编译一些 python 库。

【讨论】:

如果你愿意分享,我会很想看看那个“Spark slave script”。 该脚本引用了类似github.com/nikonyrh/docker-scripts/blob/master/… 的东西,它是“docker run”命令的包装器。最重要的是它设置 SPARK_PUBLIC_DNS 并使用 ***.com/a/32737662/3731823 中提到的“--net host”

以上是关于如何将具有依赖项的 python 脚本打包到 zip/tar 中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个具有更高Spring版本的Spring项目中使用具有Spring作为打包依赖项的jar?

如何使用 webpack 打包节点程序

如何捆绑包含依赖项的 Python 应用程序?

如何创建具有基本依赖项的 deb 包?

如何将具有文件外依赖项的 sklearn 模型保存到磁盘?

如何使 Python 脚本独立可执行以在没有任何依赖项的情况下运行? [复制]