Python包出错:“错误的ELF类:ELFCLASS64”(在64位系统上编译为32位?)

时间:2011-09-05 09:44:14

标签: gcc 32bit-64bit lxml cross-compiling easy-install

我正在尝试在我的共享服务器上easy_install一个名为“lxml”的Python包。但是,我必须在本地执行此操作,因为我无法在我的在线服务器上分叉进程。

  1. 我的prod和dev服务器都是Ubuntu64,但只有我的离线开发者有python-64,而我的prod有32bit。
  2. Python版本是2.6.6。
  3. 我正在使用virtualenv
  4. 所以我在我的开发服务器(使用pip)上构建它,然后我只是上传到我的prod服务器上(通过ftp)。但我得到了这个错误:

    django.core.exceptions.ImproperlyConfigured: Error importing middleware pootle_misc.middleware.siteconfig: "/accounts/gabriobald/www/translate.9thcircle.it/lib/python2.6/site-packages/lxml/etree.so: wrong ELF class: ELFCLASS64"
    

    我想这是因为绑定的文件库etree.so

    所以,重点是:有没有办法在64位系统上以32位方式轻松安装Python软件包?

1 个答案:

答案 0 :(得分:2)

使用easy_install,您可以指定要安装的确切包。如果该软件包的32位版本可用,您可以下载它然后执行:easy_install ./lxml-2.3-py-2.6-linux_i386.egg。但是我认为对于lxml,没有针对linux 32bits和你的python版本的预编译版本。

在这个link中,您可以找到如何在64位系统上构建32位python模块。但是你需要32位版本的python及其所有依赖项,这样你就无法在当前的开发环境中工作(你提到你有64位版本)。

强烈建议让开发环境尽可能接近生产环境,这样在部署到生产环境中时就不会发现“意外”。由于操作系统的差异,有时不可能拥有完全相同的环境。这是我们打包BitNami Django Stack和虚拟设备(我是BitNami开发人员)的原因之一。该堆栈是一个独立的,多平台的包,供开发人员使用。它也完全独立于用户系统,不会干扰系统中的任何其他内容。发展之上 堆栈并将其用于生产,以确保您在两个系统中都具有相同的环境。在任何情况下,你已经有了一个生产服务器,如果你不想使用堆栈(你需要迁移你的应用程序),我建议你使用32位版本的python和依赖项来设置开发环境。