Python: PIL/_imaging.so: 无效的ELF头部

2 投票
1 回答
1629 浏览
提问于 2025-04-19 14:38

我在本地机器上使用虚拟环境来运行Python 2.7,一切都正常。但是当我把“site-packages”文件夹转移到我的生产服务器时,出现了以下错误:

PIL/_imaging.so: invalid ELF header

这个问题出现在Pillow 2.5.3这个Python包上,你可以在这里找到它。

我在使用OS X系统,而我的生产服务器是Debian系统。我怀疑操作系统之间的差异可能导致了这个问题,但我不太确定。我不知道该怎么解决这个问题。有没有人能帮帮我?

注意:我不能直接在生产服务器上安装包,所以我必须直接上传它们才能使用。

1 个回答

2

在你当前的虚拟环境中,执行以下命令:

pip freeze > requirements.txt

把这个 requirements.txt 文件复制到你的服务器上。

创建一个新的虚拟环境(删除你之前使用的那个)。

激活虚拟环境,然后输入 pip install -r requirements.txt

现在,库会被正确安装并构建好。

如果你看到关于 PIL 的错误,执行以下命令:

sudo apt-get install build-essential python-dev
sudo apt-get build-dep python-imaging

虚拟环境是用来在你当前的机器上隔离 Python 的;它们并不是用来创建可移动的环境。这样做的好处是可以在不修改系统 Python 安装的情况下,使用不同版本的 Python 包。

使用虚拟环境不需要超级用户权限;所以即使你不是“root”,也可以安装包。

不过,它确实需要互联网连接,因为包是从网上下载的。如果你的服务器没有互联网访问权限,可以在你的 Mac 上,从虚拟环境中执行以下操作:

pip install basket

这将安装一个叫 basket 的小工具,它可以让你下载包 但不安装它们。这个工具非常适合保存本地的包档案,你可以把它们转移到其他机器上。

安装完成后,按照文档中的步骤操作:

  1. basket init
  2. pip freeze > requirements.txt
  3. awk -F'==' '{print $1}' requirements.txt | basket download

这将把你 requirements.txt 文件中的所有包下载到 ~/.basket 目录。

接下来,把这个目录复制到你的服务器上,然后在虚拟环境中运行以下命令:

pip install --no-index -f /path/to/basket -r requirements.txt

撰写回答