问题描述
如果我在本地计算机上安装了virtualenv,请激活它并尝试运行python3,然后它可以正常工作(使用导入的模块)。但是,在将其发送到实时服务器(使用scp和filezilla)之后,它会显示错误:
-bash: /<path>/venv4/bin/python3: cannot execute binary file: Exec format error
在同一包中的python和python3.8也会发生这种情况。
我尝试重新安装virtualenv和pipx,重新创建virtualenv并重新上传几次。
似乎找不到该模块,因为当我在实时服务器上激活virtualenv并键入“哪个python3”时,它向我展示了系统python3:
/usr/bin/python3
如果我尝试使用完整路径直接执行venv的python3,它也不起作用。
之所以这样做,是因为我使用的旧版virtualenv已停止工作,因为它似乎无法再找到已安装的模块。我不确定为什么。
任何帮助将不胜感激。
解决方法
我相信某些pip软件包不仅包含python代码,还必须进行编译。如果您的主机操作系统与服务器操作系统不同,或者安装了不同的库,则主机编译的代码将与服务器不兼容。
常见做法是使用类似的东西创建带有所需软件包列表的文件
pip freeze > requirements.txt
并使用类似的方法在服务器上重建环境
pip install -r requirements.txt