Chris
Chris

Reputation: 507

Travis build. ImportError: No module named gdal

I have a test that imports a small library of functions written in Python. The library imports the "gdal" module. Normally you can install gdal via

apt-get install python-gdal

or via pip

pip install gdal

However since Travis runs a virtual environment for Python a special package needs to be used called pygdal. I use this package on my local machine with a virtual environment and it works great. However after installing it on Travis Python is unable to find the gdal module. Here is my yml:

dist: trusty
sudo: required
language: python
python:
- '2.7'
before_install:
- sudo add-apt-repository -y ppa:ubuntugis/ppa
- sudo apt-get update
- sudo apt-get install gdal-bin libgdal-dev
- gdal-config --version
install:
- pip install 'pygdal>=2.1.0.0,<=2.1.0.999'
script:
- cd scripts
- python -m unittest lib_test

Here is some output confirming the installation succeeded:

> $ pip install 'pygdal>=2.1.0.0,<=2.1.0.999' Collecting
> pygdal<=2.1.0.999,>=2.1.0.0   Downloading pygdal-2.1.0.3.tar.gz
> (407kB)
>     100% |████████████████████████████████| 409kB 2.1MB/s  Requirement already satisfied (use --upgrade to upgrade): numpy>=1.0.0 in
> /home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages (from
> pygdal<=2.1.0.999,>=2.1.0.0) Building wheels for collected packages:
> pygdal   Running setup.py bdist_wheel for pygdal ... - \ | /
> - \ | / - \ | / done   Stored in directory:
> /home/travis/.cache/pip/wheels/ef/c6/41/12cedd8a9d5c5c44291daace5ab7bb4bb55c7a691cd421be0e
> Successfully built pygdal Installing collected packages: pygdal
> Successfully installed pygdal-2.1.0.3

And here is the error:

$ python -m unittest lib_test
Traceback (most recent call last):
  File "/opt/python/2.7.12/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/opt/python/2.7.12/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/opt/python/2.7.12/lib/python2.7/unittest/__main__.py", line 12, in <module>
    main(module=None)
  File "/opt/python/2.7.12/lib/python2.7/unittest/main.py", line 94, in __init__
    self.parseArgs(argv)
  File "/opt/python/2.7.12/lib/python2.7/unittest/main.py", line 149, in parseArgs
    self.createTests()
  File "/opt/python/2.7.12/lib/python2.7/unittest/main.py", line 158, in createTests
    self.module)
  File "/opt/python/2.7.12/lib/python2.7/unittest/loader.py", line 130, in loadTestsFromNames
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "/opt/python/2.7.12/lib/python2.7/unittest/loader.py", line 91, in loadTestsFromName
    module = __import__('.'.join(parts_copy))
  File "lib_test.py", line 5, in <module>
    from lib import build_qa_mask
  File "lib.py", line 3, in <module>
    import gdal
ImportError: No module named gdal

Upvotes: 4

Views: 797

Answers (1)

Mike T
Mike T

Reputation: 43642

I've never needed pygdal. Here is something to try in your .travis.yml configuration:

language: python
before_install:
  - sudo add-apt-repository --yes ppa:ubuntugis/ppa
  - sudo apt-get --quiet update
  - sudo apt-get install --yes libgdal-dev gdal-bin
install:
  - pip install gdal==`gdal-config --version`

The important detail is that pip install gdal== matches the installed version from gdal-config --version so that pip will just install the correct version for the virtualenv.

Upvotes: 2

Related Questions