【问题标题】:Python 3.4 ImportError: No module named '_gdal_array'No module named '_gdal_array'Python 3.4 ImportError:没有名为“_gdal_array”的模块没有名为“_gdal_array”的模块
【发布时间】:2017-12-30 13:17:13
【问题描述】:

尽管几年前学习了python(2.7),但我才刚刚开始再次使用它。 我正在使用 python 3.4.4 并尝试使用 GDAL 包将栅格读取为数组。 我按照此处概述的步骤进行操作: https://sandbox.idre.ucla.edu/sandbox/tutorials/installing-gdal-for-windows Python 3.4 除外,并从此处使用了 GDAL 二进制文件:http://www.gisinternals.com/release.php

在测试基本功能时,我尝试读取 tiff 文件,如图所示

import gdal as gdal
import numpy as np
import ogr
import osr
import os
import sys
e=('error has occurred')

# this allows GDAL to throw Python Exceptions
gdal.UseExceptions()

# open dataset
test = ('LE70130312004049EDC01_sr_adjacent_cloud_qa.tif')
print("file exists")


# getting metadata
gtif = gdal.Open(test)
print (gtif.GetMetadata())
print("metadata printed")

try:
    src_ds = gdal.Open(test)
    print("gdal.open success")
except (RuntimeError):
    print ('Unable to open INPUT.tif')
    print(e)

try:
    srcband = src_ds.GetRasterBand(1)
    print("get raster band 1 success")
except (RuntimeError):
    # for example, try GetRasterBand(10)
    print ('Band ( %i ) not found') % band_num
    print (e)


try:
    rasArray=np.array(src_ds.ReadAsArray())
    print("read as array")
except (RuntimeError):
    print (e)

当我使用“rasArray=np.array(src_ds.ReadAsArray())”运行最后一个块时,我收到以下错误代码:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\osgeo\gdal_array.py", line 16, in swig_import_helper
    fp, pathname, description = imp.find_module('_gdal_array', [dirname(__file__)])
  File "C:\Python34\lib\imp.py", line 297, in find_module
    raise ImportError(_ERR_MSG.format(name), name=name)
ImportError: No module named '_gdal_array'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\dem12002\Desktop\test.py", line 38, in <module>
    rasArray=np.array(src_ds.ReadAsArray())
  File "C:\Python34\lib\site-packages\osgeo\gdal.py", line 1829, in ReadAsArray
    from . import gdalnumeric
  File "C:\Python34\lib\site-packages\osgeo\gdalnumeric.py", line 1, in <module>
    from osgeo.gdal_array import *
  File "C:\Python34\lib\site-packages\osgeo\gdal_array.py", line 26, in <module>
    _gdal_array = swig_import_helper()
  File "C:\Python34\lib\site-packages\osgeo\gdal_array.py", line 18, in swig_import_helper
    import _gdal_array
ImportError: No module named '_gdal_array'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\dem12002\Desktop\test.py", line 40, in <module>
    except (RuntimeError,e):
NameError: name 'e' is not defined

这与我安装 GDAL 或 Python 的方式有关吗? 我应该切换到 Python 2.7 吗? 我见过很多关于“没有命名模块”的问题,但是像这样涉及 GDAL 问题的并不多。

更新: 我只是从我下载的 msi 中重新安装了 GDAL,它会自动为我修复它。谁会知道这很容易。谢谢!

【问题讨论】:

  • 显然与 GDAL 的接口是用 SWIG 编写的。首先检查您安装的版本是否与您的 python 版本兼容。该模块正在寻找一个名为_gdal_array 并带有前导下划线的dll,但找不到它。你可以从文件系统搜索开始,看看你是否有这个 dll。
  • 谢谢,我注意到在 site-packages/osgeo/ 我有一个 python 文件“gdal_array”,但不知道要查找 dll。
  • Gribouillis,我注意到我缺少 osgeo 文件夹中的 _gdal_array.pyd,您对如何继续有任何建议?
  • 如果您有_gdal_array.dll,您可以尝试将其重命名为_gdal_array.pyd。恐怕我不能告诉你更多,因为我不知道这个模块。很早以前就用过Swig,主要是在linux中...

标签: python arrays python-3.x numpy gdal


【解决方案1】:

我也遇到过这个问题,我是这样解决的:

pip3 uninstall gdal
pip3 install numpy
pip3 install gdal

我正在使用 MAC OS 顺便说一句

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 2013-01-06
    • 2013-03-11
    • 2015-12-09
    • 2012-01-26
    • 2020-12-15
    • 2015-11-17
    相关资源
    最近更新 更多