我必须用pyspark hdfs集群所需的库来构建我自己的python虚拟环境。我的本地机器是mac,我用--copies创建了虚拟环境,以确保我打包的二进制文件没有软链接。然而,当我将这个虚拟环境导出到linux机器上以用于pyspark时,我遇到了错误python3.7: cannot execute binary file: Exec format error。有什么建议可以解决这个问题吗?
python3.7: cannot execute binary file: Exec format error
bjg7j2ky1#
此错误消息表示可执行文件的格式错误。这是从arm64系统(例如运行arm64的带有virtualenv的M1 Mac)和amd64系统复制二进制文件的标志,因为它们使用不同的二进制格式。跨操作系统移动virtualenv的最简单方法是冻结依赖项(例如通过pip freeze > requirements.txt),然后在目标计算机上重新安装它们。冻结依赖关系后,requirements.txt文件将包含所有使用的python包的列表,以及它们的版本。例如:
arm64
amd64
pip freeze > requirements.txt
requirements.txt
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,你将无法运行你的二进制文件。
pip install -r requirements.txt
1条答案
按热度按时间bjg7j2ky1#
此错误消息表示可执行文件的格式错误。这是从
arm64
系统(例如运行arm64
的带有virtualenv的M1 Mac)和amd64
系统复制二进制文件的标志,因为它们使用不同的二进制格式。跨操作系统移动virtualenv的最简单方法是冻结依赖项(例如通过
pip freeze > requirements.txt
),然后在目标计算机上重新安装它们。冻结依赖关系后,
requirements.txt
文件将包含所有使用的python包的列表,以及它们的版本。例如:要在其他virtualenv中安装这些依赖项,请使用
pip install -r requirements.txt
。此过程可避免出现许多可能的不兼容问题:stdlib版本和处理器体系结构。第一个问题可以通过静态编译二进制文件来解决,但如果您自己编译它们,通常也可以这样做。
第二个问题更难,需要交叉编译
amd64
的二进制文件(如果你自己编译的话),或者只是在目标机器上重新安装依赖项。实际上,如果你使用的是M1 mac,你的虚拟环境是arm64
,但是你的hdfs集群是amd64
,你将无法运行你的二进制文件。