GDAL импорт не выполняется только с IPython - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь импортировать gdal в IPython.

from osgeo import gdal

Импорт работает нормально из «обычного» Python, но не работает с IPython (и jupyter), полный возврат показан в конце.

Я использую anaconda версии 4.5.11, Python версии 3.6.6, IPython версии 7.0.1 на MacOS 10.14. Я также использую доморощенный.

Это в чистой среде анаконды, которая содержит только следующее: 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.etree и cv2, которые я могу без проблем импортировать из python.

Я обнаружил, что основная проблема заключается в том, что для IPython мне нужно установить переменную среды $DYLD_LIBRARY_PATH, в то время как Python с радостью принимает $LD_LIBRARY_PATH. Я был бы очень рад, если бы кто-нибудь мог объяснить мне, почему это так.

Более того, я могу импортировать cv2 из IPython, только если я установлю его через pip install opencv-python, но не могу, если я установлю его через conda install opencv. Обычный питон рад импортировать оба.

Для cv2 и gdal правильное связывание библиотеки libiconv является ключом.

Любые подсказки относительно этого парадоксального поведения будут высоко оценены!

...