Django、GDAL 和 CircleCI 2

Django, GDAL and CircleCI 2

我有一个配置了 GeoDjango 的 Django 应用程序,它在 CircleCI 2.0 构建上失败并出现以下错误:

django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library. Is GDAL installed? If it is, try setting GDAL_LIBRARY_PATH in your settings.

但是,当我从 settings.py 中的 DJANGO_APPS 中删除 'django.contrib.gis' 时,构建运行成功。

在 postgres 和 GDAL docker 图像之外,是否有在 CircleCI 中配置 GDAL 的额外步骤?我(可能是错误的)假设在安装 docker 图像后会找到 GDAL。下面是我的 config.yml:

version: 2
jobs:
  build:
    docker:
      - image: circleci/python:3.6.3

      - image: circleci/postgres:10.1-postgis
        environment:
        - POSTGRES_USER=ubuntu
        - POSTGRES_DB=myapp_test

      - image: geodata/gdal

    working_directory: ~/repo

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "requirements.txt" }}
          # fallback to using the latest cache if no exact match is found
          - v1-dependencies-

      - run:
          name: install dependencies
          command: |
            python3 -m venv venv
            . venv/bin/activate
            pip install -r requirements.txt
      - save_cache:
          paths:
            - ./venv
          key: v1-dependencies-{{ checksum "requirements.txt" }}

      - run:
          name: run tests
          command: |
            . venv/bin/activate
            python manage.py test
          environment:
            DATABASE_URL: "postgres://ubuntu@localhost:5432/myapp_test"

      - store_artifacts:
          path: test-reports
          destination: test-reports

我不熟悉 Docker,但我在安装 GDAL 时遇到了很多问题。通常,当我必须在 Django 中设置需要 GDAL 的环境时,我会(大致)遵循以下步骤。

首先我 运行 这些命令,安装 GDAL 库并在安装 python 库之前设置头文件:

sudo apt-get install libgdal-dev
gdal-config --version  # to see what version of GDAL you have
export CPLUS_INCLUDE_PATH=/usr/include/gdal
export C_INCLUDE_PATH=/usr/include/gdal

接下来,在我的 reqs.txt 某处有这一行:

GDAL==2.1.0  # replace the version with the one you get from gdal-config

我在 reqs.txt:

中安装了软件包
pip install -r reqs.txt

通常这就是我设置 GDAL 所需要的,这样我就可以使用 django.contrib.gis

希望对您有所帮助

问题是您的第三个图像 运行 在一个单独的容器中,并且 GDAL 在第一个容器中不可用。

我使用来自 Docker Hub 的 docker 图片 wooyek/geodjango 进行了 geodjango 测试 运行。

这是我的 config.yml 的开头:

version: 2
jobs:
  build:
    docker:
      # image with pre-installed geodjango libs
      - image: wooyek/geodjango

      # postgis database
      - image: circleci/postgres:alpine-postgis-ram
        environment:
          POSTGRES_USER: postgres
          POSTGRES_DB: circle_test

我通过添加以下内容修复了它:

apt-get update && apt-get install -y \
gdal-bin python-gdal python3-gdal

就在你 运行 pip install:

  - run:
      name: install dependencies
      command: |
        python3 -m venv venv
        . venv/bin/activate
        pip install -r requirements.txt
        apt-get update && apt-get install -y \
        gdal-bin python-gdal python3-gdal