【问题标题】:Why does my virtualenv python3 work fine on my local machine but not when I upload the virtualenv to the server?为什么我的 virtualenv python3 在我的本地机器上可以正常工作,但当我将 virtualenv 上传到服务器时却不行?
【发布时间】:2020-08-10 20:52:56
【问题描述】:

如果我在本地机器上安装 virtualenv,激活它并尝试运行 python3,那么它可以正常工作(使用导入的模块)。但是,在我将它发送到实时服务器(使用 scp 和 filezilla)之后,它给出了错误:

-bash: /<path>/venv4/bin/python3: cannot execute binary file: Exec format error

python 和 python3.8 在同一个包中也会发生这种情况。

我尝试重新安装 virtualenv 和 pipx,重新创建 virtualenv 并重新上传几次。

似乎找不到模块,因为当我在实时服务器上激活 virtualenv 并输入“which python3”然后它显示系统 python3:

/usr/bin/python3

如果我尝试使用完整路径直接执行venv的python3,它也不起作用。

我这样做的原因是因为我使用的旧 virtualenv 已经停止工作,因为它似乎无法再找到已安装的模块。我不知道为什么。

任何帮助将不胜感激。

【问题讨论】:

  • 这只能在服务器和您的桌面是具有相同库版本的相同操作系统时才有效。 Exec format error 表示它是为不同的操作系统或架构编译的。
  • 两者都是 64 位...还有什么我应该检查的吗?
  • 它们都是 64 位的相同 OS 和相同版本的 python、glibc 等吗?
  • 那就不是同一个操作系统和架构了。
  • 一般来说,不要试图复制virtualenvs。在开发中使用它们来隔离您的环境并在requirements.txt(对于pip)、PipfilePipfile.lock(对于pipenv)或pyproject.tomlpoetry.lock(对于poetry)中定义您的依赖项)。使用这些文件在生产环境中构建类似的环境。

标签: python python-3.x virtualenv


【解决方案1】:

我相信一些 pip 包不仅仅包含 python 代码,而且必须编译。如果您的主机操作系统与您的服务器操作系统不同,或者您安装了不同的库,则主机编译的代码将与您的服务器不兼容。

通常的做法是创建一个包含所需包列表的文件,使用类似

pip freeze > requirements.txt

并在服务器上重建环境,使用类似

pip install -r requirements.txt

【讨论】:

  • 感谢您的回答,问题是我也无法从 virtualenv 执行 pip。我不能直接在服务器上安装 venv,因为托管服务提供商不允许这样做。编辑:将从 Pipfile 尝试
  • python呢?您的服务器是否安装了正确版本的 python?
  • 是的,它有 python3
  • 那么看起来你有两个选择: 1. 手动将 pip/virtualenv 安装在与不允许安装它们并用作 python 模块的位置不同的位置,python -m pip install ...,@ 987654324@。您可能还必须以某种方式在命令中指定安装它们的位置,我只是不确定标志是什么。 2. 设置一个与服务器具有相同操作系统和库的虚拟机,在其中构建 venv,并将其部署到服务器。
猜你喜欢
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 2013-12-21
  • 2017-08-14
  • 1970-01-01
相关资源
最近更新 更多