pyspark 将python虚拟环境导出到Linux时运行二进制文件时出错

roejwanj  于 2022-11-21  发布在  Spark
关注(0)|答案(1)|浏览(264)

我必须用pyspark hdfs集群所需的库来构建我自己的python虚拟环境。我的本地机器是mac,我用--copies创建了虚拟环境,以确保我打包的二进制文件没有软链接。
然而,当我将这个虚拟环境导出到linux机器上以用于pyspark时,我遇到了错误python3.7: cannot execute binary file: Exec format error。有什么建议可以解决这个问题吗?

bjg7j2ky

bjg7j2ky1#

此错误消息表示可执行文件的格式错误。这是从arm64系统(例如运行arm64的带有virtualenv的M1 Mac)和amd64系统复制二进制文件的标志,因为它们使用不同的二进制格式。
跨操作系统移动virtualenv的最简单方法是冻结依赖项(例如通过pip freeze > requirements.txt),然后在目标计算机上重新安装它们。
冻结依赖关系后,requirements.txt文件将包含所有使用的python包的列表,以及它们的版本。例如:

requests==1.2.3
pip-tools=3.2.1
boto3==1.3.2

要在其他virtualenv中安装这些依赖项,请使用pip install -r requirements.txt
此过程可避免出现许多可能的不兼容问题:stdlib版本处理器体系结构。第一个问题可以通过静态编译二进制文件来解决,但如果您自己编译它们,通常也可以这样做。
第二个问题更难,需要交叉编译amd64的二进制文件(如果你自己编译的话),或者只是在目标机器上重新安装依赖项。实际上,如果你使用的是M1 mac,你的虚拟环境是arm64,但是你的hdfs集群是amd64,你将无法运行你的二进制文件。

相关问题