GDAL仅从IPython导入失败

时间:2018-10-26 15:46:52

标签: python anaconda ipython gdal

我正在尝试在IPython中导入gdal

from osgeo import gdal

从“常规” Python导入可以正常工作,但是从IPython(和jupyter)导入失败,完整的回溯显示在最后。

我在MacOS 10.14上使用anaconda版本4.5.11,Python版本3.6.6,IPython版本7.0.1。 我也使用自制软件。

这是在干净的anaconda环境中,其中仅包含以下内容: conda create -n gdal gdal ipython

什么可能导致导入在python中成功但在IPython中失败?


In [1]: from osgeo import gdal                                                                                                                                                                                                                                                  
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-61e0eefce4de> in <module>
----> 1 from osgeo import gdal

/anaconda3/envs/gdal/lib/python3.6/site-packages/osgeo/__init__.py in <module>
     19                 fp.close()
     20             return _mod
---> 21     _gdal = swig_import_helper()
     22     del swig_import_helper
     23 else:

/anaconda3/envs/gdal/lib/python3.6/site-packages/osgeo/__init__.py in swig_import_helper()
     15         if fp is not None:
     16             try:
---> 17                 _mod = imp.load_module('_gdal', fp, pathname, description)
     18             finally:
     19                 fp.close()

/anaconda3/envs/gdal/lib/python3.6/imp.py in load_module(name, file, filename, details)
    241                 return load_dynamic(name, filename, opened_file)
    242         else:
--> 243             return load_dynamic(name, filename, file)
    244     elif type_ == PKG_DIRECTORY:
    245         return load_package(name, filename)

/anaconda3/envs/gdal/lib/python3.6/imp.py in load_dynamic(name, path, file)
    341         spec = importlib.machinery.ModuleSpec(
    342             name=name, loader=loader, origin=path)
--> 343         return _load(spec)
    344 
    345 else:

ImportError: dlopen(/anaconda3/envs/gdal/lib/python3.6/site-packages/osgeo/_gdal.cpython-36m-darwin.so, 2): Symbol not found: _libiconv
  Referenced from: /anaconda3/envs/gdal/lib/libspatialite.7.dylib
  Expected in: /usr/lib/libiconv.2.dylib
 in /anaconda3/envs/gdal/lib/libspatialite.7.dylib

编辑

模块lxml.etreecv2出现了类似的问题,我可以从python始终导入所有模块而没有问题。

我发现主要问题似乎是,对于IPython,我需要设置环境变量$DYLD_LIBRARY_PATH,而Python则很乐意接受$LD_LIBRARY_PATH。如果有人可以向我解释为什么会这样,我会很高兴。

此外,如果我是通过cv2安装的,那么我只能从IPython导入pip install opencv-python,但是如果我是通过conda install opencv安装的,则不能。常规python很乐意同时导入两者。

对于cv2gdal来说,正确链接库libiconv似乎是关键。

任何有关这种自相矛盾行为的线索将不胜感激!

0 个答案:

没有答案