[GIS] Installing python-mapscript in virtualenv

installationmapscriptmapserverpython

I am on a django project where I want to use the python implementation of the mapserver mapscript library. I was able to install mapserver and python-mapscript from source.

However, due to the project setup I am forced to run django in a virtualenv that does not allow site-packages in my virtual environment.

Since mapscript is installed as a global site-package my django app can't see the mapscript installation. When I try to install mapscript through pip install mapscript I get an error 'mapserver.h' file not found.

How can I install python-mapscript in my virtual environment?

I thought of copying the installed egg into my virtual environment, but I am not sure if that is possible.

Best Answer

I just faced the same problem and solved it by copy the mapscript.py and _mapscript.so into my virtual env.

cd venv/lib/python2.7/site-packages
cp /usr/lib/python2.7/dist-packages/_mapscript.so .
cp /usr/lib/python2.7/dist-packages/mapscript.py .

At least the following script in a python web-app worked fine, based on the mapserver demo files I got here.

...
import mapscript
map = mapscript.mapObj(mapfile_path + "itasca.map")
img = map.draw()
img.save("/var/www/img/tmp/mapscript_test_itasca.png")
...

This is just a test script, which proved that the mapfile is correctly read and the picture is created.

I you are not allowed to copy, you may try your luck with pip install again by adding the include paths:

CPPFLAGS="-I/usr/include/mapserver -I/usr/include/gdal" pip install mapscript

I needed the packages libmapserver-dev, libgd-dev, libgdal-dev and libproj-dev installed to get the compiling running to start and ran into many errors. The log showed:

Using version 5.6.3.0 (newest of versions: 5.6.3.0, 5.4.2.1, 5.02.2.33)

While Mapserver 6.4 is installed on my system (and 7.0 just came out), there seems to by a compatibility issue. According to PyPi the most recept mapscript pip package is version 5.6 from 2010.

I guess you can't install it via pip unless you use mapserver 5.6 or older.