coln
coln

Reputation: 123

Python: PIL/_imaging.so: invalid ELF header

I'm using a virtualenv to run Python 2.7 in my local machine and everything works as expected. When I transfer "site-packages" to my production sever, I get the follow error:

PIL/_imaging.so: invalid ELF header

This happens on the Pillow 2.5.3 pypi package found here

I am running OS X, while my production server is running Debian. I suspect the OS differences might be causing the issue but I'm not sure. I have no idea how to fix this. Can anyone help?

Note: I cannot install packages directly to my production server, so I have to upload them directly to use them.

Upvotes: 2

Views: 1684

Answers (1)

Burhan Khalid
Burhan Khalid

Reputation: 174662

In your current virtual environment, execute the following command

pip freeze > requirements.txt

Copy this requirements.txt file to your server.

Create your new virtualenvironment (delete the one you were using before).

Activate the virtual environment and then type pip install -r requirements.txt

Now, the libraries will be installed correctly and built accurately as well.

If you see errors for PIL, execute the following commands:

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

virtual environments are for isolating Python on your current machine; they are not for creating portable environments. The benefit is to work with different versions of Python packages without modifying the system Python installation.

Using virtual environments does not require super-user permissions; so you can install packages even if you are not "root".

It does, however, require Internet access as packages are downloaded from the web. If your server does not have access to the Internet, back on your mac, do the following, from your virtual environment:

pip install basket

This will install basket which is a small utility that allows you to download packages but not install them. Great for keeping a local archive of packages that you can move to other machines.

Once its installed, follow these steps as listed in the documentation:

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

This will download all the packages from your requirements.txt file into ~/.basket

Next, copy this directory to your server and then run the following command from your virtualenvironment

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

Upvotes: 2

Related Questions