如何将具有依赖项的 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 中?的主要内容,如果未能解决你的问题,请参考以下文章