DEV Community

Julien Lengrand-Lambert
Julien Lengrand-Lambert

Posted on • Originally published at lengrand.fr on

Installing gdal for Python 3.6

Installing gdal for Python 3.6

Heyo,

At Skyai, we are working a lot with Geographic Information Systems.

Just like the large majority of the market, we use GDAL and its Python bindings for that.

Even though we are ESRI partners, we still love our QGis and Python.

I recently changed laptop and got the latest Macbook, and had to reinstall the environement from scratch. And as much as I love Python, having to setup GDAL on my former laptop still give me nightmare so I was dreading this moment.

But actually, I have to admit that the process was much smoother than expected! I initially followed this guide for Python 2.7, without success.

Without further due, here are the steps.

Installing GDAL on Python 3.6

My setup

  • Latest MacBook Pro (2017)
  • Python 3.6 (but should work for others too)
  • conda 4.5.4

Installing Conda

Simply follow the official guide.

Creating an environment with GDAL as a dependency

$ conda create --name gdal_test_working -c conda-forge python=3.6 gdal
Enter fullscreen mode Exit fullscreen mode

Accept the request in your terminal :

Solving environment: done

## Package Plan ##

  environment location: /Users/jlengrand/miniconda3/envs/gdal_test_working

  added / updated specs:
    - gdal
    - python=3.6

The following packages will be downloaded:

    package | build
    ---------------------------|-----------------
    poppler-data-0.4.9 | 0 3.5 MB conda-forge
    certifi-2018.4.16 | py36_0 142 KB conda-forge
    libgdal-2.2.4 | 3 14.4 MB conda-forge
    setuptools-39.2.0 | py36_0 550 KB conda-forge
    ------------------------------------------------------------
                                           Total: 18.7 MB

The following NEW packages will be INSTALLED:

    boost: 1.66.0-py36_1 conda-forge
    boost-cpp: 1.66.0-1 conda-forge
    bzip2: 1.0.6-1 conda-forge
    ca-certificates: 2018.4.16-0 conda-forge
    cairo: 1.14.10-0 conda-forge
    certifi: 2018.4.16-py36_0 conda-forge
    curl: 7.60.0-0 conda-forge
    expat: 2.2.5-0 conda-forge
    fontconfig: 2.12.6-0 conda-forge
    freetype: 2.8.1-0 conda-forge
    freexl: 1.0.5-0 conda-forge
    gdal: 2.2.4-py36_0 conda-forge
    geos: 3.6.2-1 conda-forge
    geotiff: 1.4.2-1 conda-forge
    gettext: 0.19.8.1-0 conda-forge
    giflib: 5.1.4-0 conda-forge
    glib: 2.55.0-0 conda-forge
    hdf4: 4.2.13-0 conda-forge
    hdf5: 1.10.1-2 conda-forge
    icu: 58.2-0 conda-forge
    jpeg: 9b-2 conda-forge
    json-c: 0.12.1-0 conda-forge
    kealib: 1.4.7-4 conda-forge
    krb5: 1.14.6-0 conda-forge
    libdap4: 3.18.3-2 conda-forge
    libffi: 3.2.1-3 conda-forge
    libgdal: 2.2.4-3 conda-forge
    libgfortran: 3.0.1-h93005f0_2
    libiconv: 1.15-0 conda-forge
    libkml: 1.3.0-6 conda-forge
    libnetcdf: 4.6.1-2 conda-forge
    libopenblas: 0.2.20-hdc02c5d_4
    libpng: 1.6.34-0 conda-forge
    libpq: 9.6.3-0 conda-forge
    libspatialite: 4.3.0a-19 conda-forge
    libssh2: 1.8.0-2 conda-forge
    libtiff: 4.0.9-0 conda-forge
    libxml2: 2.9.8-0 conda-forge
    ncurses: 5.9-10 conda-forge
    numpy: 1.14.3-py36he6379a5_1
    numpy-base: 1.14.3-py36h7ef55bc_1
    openjpeg: 2.3.0-2 conda-forge
    openssl: 1.0.2o-0 conda-forge
    pcre: 8.41-1 conda-forge
    pip: 9.0.3-py36_0 conda-forge
    pixman: 0.34.0-2 conda-forge
    poppler: 0.61.1-3 conda-forge
    poppler-data: 0.4.9-0 conda-forge
    proj4: 4.9.3-5 conda-forge
    python: 3.6.5-1 conda-forge
    readline: 7.0-0 conda-forge
    setuptools: 39.2.0-py36_0 conda-forge
    sqlite: 3.20.1-2 conda-forge
    tk: 8.6.7-0 conda-forge
    wheel: 0.31.0-py36_0 conda-forge
    xerces-c: 3.2.0-0 conda-forge
    xz: 5.2.3-0 conda-forge
    zlib: 1.2.11-h470a237_3 conda-forge

Proceed ([y]/n)? y
Enter fullscreen mode Exit fullscreen mode

Testing the installation

Activate your newly created environment, start python and try to import GDAL

$ conda activate gdal_test_working
(gdal_test_working) $ python
Python 3.6.5 | packaged by conda-forge | (default, Apr 6 2018, 13:44:09)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import gdal
>>> help(gdal)
Enter fullscreen mode Exit fullscreen mode

Enjoy!

The secret

The magic secret is to make sure to use a single forge to install all your dependencies with conda.

In my case I used -c conda-forge.

This will ensure there are no possible conflicts between version.

More about the issue

The first thing I tried was to install without the forge option like this :

$ conda create --name gdal_test python=3.6 gdal
Enter fullscreen mode Exit fullscreen mode

But when trying to import gdal, here is the issue I was getting:

$ conda activate gdal_test
(gdal_test) $ python
Python 3.6.5 | packaged by conda-forge | (default, Apr 6 2018, 13:44:09)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import gdal
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/jlengrand/miniconda3/envs/gdal_test/lib/python3.6/site-packages/gdal.py", line 2, in <module>
    from osgeo.gdal import deprecation_warn
  File "/Users/jlengrand/miniconda3/envs/gdal_test/lib/python3.6/site-packages/osgeo/ __init__.py", line 21, in <module>
    _gdal = swig_import_helper()
  File "/Users/jlengrand/miniconda3/envs/gdal_test/lib/python3.6/site-packages/osgeo/ __init__.py", line 17, in swig_import_helper
    _mod = imp.load_module('_gdal', fp, pathname, description)
  File "/Users/jlengrand/miniconda3/envs/gdal_test/lib/python3.6/imp.py", line 243, in load_module
    return load_dynamic(name, filename, file)
  File "/Users/jlengrand/miniconda3/envs/gdal_test/lib/python3.6/imp.py", line 343, in load_dynamic
    return _load(spec)
ImportError: dlopen(/Users/jlengrand/miniconda3/envs/gdal_test/lib/python3.6/site-packages/osgeo/_gdal.cpython-36m-darwin.so, 2): Library not loaded: @rpath/libpoppler.71.dylib
  Referenced from: /Users/jlengrand/miniconda3/envs/gdal_test/lib/libgdal.20.dylib
  Reason: image not found
>>>
Enter fullscreen mode Exit fullscreen mode

In the end the trick is pretty simple, but it took me a while to find out.

Hope it helps you too!

Now, back to coding

Cheers,

Julien

<!--kg-card-end: markdown--><!--kg-card-end: markdown-->

Top comments (2)

Collapse
 
leoauri profile image
Leo Auri

You helped me solve the error, thanks!

My error was:
ImportError: dlopen(/anaconda3/envs/fastai/lib/python3.7/site-packages/osgeo/_gdal.cpython-37m-darwin.so, 2): Library not loaded: @rpath/libkea.1.4.7.dylib
Referenced from: /anaconda3/envs/fastai/lib/libgdal.20.dylib
Reason: image not found

Collapse
 
jlengrand profile image
Julien Lengrand-Lambert

Thanks for the acknowledgement! Much appreciated and best way to start the day