Python: PIL/_imaging.so: 无效的ELF头部
我在本地机器上使用虚拟环境来运行Python 2.7,一切都正常。但是当我把“site-packages”文件夹转移到我的生产服务器时,出现了以下错误:
PIL/_imaging.so: invalid ELF header
这个问题出现在Pillow 2.5.3这个Python包上,你可以在这里找到它。
我在使用OS X系统,而我的生产服务器是Debian系统。我怀疑操作系统之间的差异可能导致了这个问题,但我不太确定。我不知道该怎么解决这个问题。有没有人能帮帮我?
注意:我不能直接在生产服务器上安装包,所以我必须直接上传它们才能使用。
1 个回答
在你当前的虚拟环境中,执行以下命令:
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
的小工具,它可以让你下载包 但不安装它们。这个工具非常适合保存本地的包档案,你可以把它们转移到其他机器上。
安装完成后,按照文档中的步骤操作:
basket init
pip freeze > requirements.txt
awk -F'==' '{print $1}' requirements.txt | basket download
这将把你 requirements.txt
文件中的所有包下载到 ~/.basket
目录。
接下来,把这个目录复制到你的服务器上,然后在虚拟环境中运行以下命令:
pip install --no-index -f /path/to/basket -r requirements.txt