Я пытаюсь импортировать 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
является ключом.
Любые подсказки относительно этого парадоксального поведения будут высоко оценены!