我正在尝试在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.etree
和cv2
出现了类似的问题,我可以从python
始终导入所有模块而没有问题。
我发现主要问题似乎是,对于IPython,我需要设置环境变量$DYLD_LIBRARY_PATH
,而Python则很乐意接受$LD_LIBRARY_PATH
。如果有人可以向我解释为什么会这样,我会很高兴。
此外,如果我是通过cv2
安装的,那么我只能从IPython导入pip install opencv-python
,但是如果我是通过conda install opencv
安装的,则不能。常规python很乐意同时导入两者。
对于cv2
和gdal
来说,正确链接库libiconv
似乎是关键。
任何有关这种自相矛盾行为的线索将不胜感激!