ImportError:文件加载到工作目录中时,DLL加载失败

时间:2019-01-25 13:42:43

标签: python

我正在尝试将scanpy导入miniconda3的jupyter笔记本中。但是,当我尝试导入scanpy时,它给出了有关hdf5extension dll的ImportError。但是,当我查看包 tables 的目录时,我可以看到两个名为hdf5.dll和hdf5extension.cp37-win_amd64.pyd(https://gyazo.com/a7d5a9d7d28756a8d82bc060b33b91ca)的文件。我以为这些是应该导入的文件,但是我不明白导入有什么问题。

我以前在此系统上使用过scanpy,但是在我通过conda安装h5py后开始出现问题(不知道如果通过conda安装scanpy会自动包含h5py)。因此,首先我卸载了h5py,但无法正常工作。卸载并重新安装了miniconda3两次,但均不起作用。 手动设置$ PATH变量也无济于事。

因此,我查看了回溯中引用的file.py,并发现 tables 目录中应该有一个文件。我找到了文件,并以为它们的名称可能不正确,因此我尝试更改名称,但也没有用。无法将python从3.7.1降级到3.6.6,也没有用python 3.6.6在conda中创建新的env并安装所有必需的软件包。

在带有miniconda3安装程序的conda 4.5.12的Windows 7 64位上工作。

  

Python 3.6.6 |由conda-forge打包| (默认值,2018年7月26日,11:48:23)[MSC v   .1900 64位(AMD64)]在Win32上   输入“帮助”,“版权”,“信用”或“许可证”以获取更多信息。

     

导入scanpy

     

回溯(最近通话最近一次):

     

文件“ C:\ Miniconda3 \ envs \ py36 \ lib \ site-packages \ scanpy__init __。py”中的第1行,

     

来自。导入工具为tl

     

第12行中的文件“ C:\ Miniconda3 \ envs \ py36 \ lib \ site-packages \ scanpy \ tools__init __。py”

     

从.sim导入sim

     

文件

中的第19行,文件“ C:\ Miniconda3 \ envs \ py36 \ lib \ site-packages \ scanpy \ tools \ sim.py”      

from .. import readwrite

     

文件“ C:\ Miniconda3 \ envs \ py36 \ lib \ site-packages \ scanpy \ readwrite.py”,第9行   在

     

导入表

     

文件

中的文件“ C:\ Miniconda3 \ envs \ py36 \ lib \ site-packages \ tables__init __。py”,第131行      

从.file导入文件,open_file,copy_file

     

文件

中的“ C:\ Miniconda3 \ envs \ py36 \ lib \ site-packages \ tables \ file.py”,第35行      

来自。导入hdf5extension

     

ImportError:DLL加载失败:找不到指定的过程。

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,两次。

这似乎是Windows特定的问题。我的第一个解决方案是更新我的Visual Studio版本,该版本随附了C-Build Tools,可能需要以某种方式运行scanpy(?)。在一段时间内效果很好。

几个星期后,我再次遇到相同的ImportError。这次唯一有用的是使用旧版本的h5py(2.8)。设置新的虚拟环境或重置Miniconda软件包无济于事,specifying the hdf5-DLL save location作为Windows变量也无济于事。

我的建议是h5py 2.9版中的新hdf5库尚未与Microsoft VS的当前C编译器兼容。

希望这会有所帮助!

答案 1 :(得分:0)

我在使用scanpy时遇到了同样的麻烦,我多次卸载了anaconda 我的问题如下:

>>> import scanpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\software\Anaconda\lib\site-packages\scanpy\__init__.py", line 32, in <module>
    from . import tools as tl
  File "C:\software\Anaconda\lib\site-packages\scanpy\tools\__init__.py", line 12, in <module>
    from ._sim import sim
  File "C:\software\Anaconda\lib\site-packages\scanpy\tools\_sim.py", line 24, in <module>
    from .. import readwrite
  File "C:\software\Anaconda\lib\site-packages\scanpy\readwrite.py", line 10, in <module>
    import tables
  File "C:\Users\xiaokang\AppData\Roaming\Python\Python36\site-packages\tables\__init__.py", line 99, in <module>
    from .utilsextension import (
ImportError: DLL load failed: 找不到指定的模块。

最后,我卸载了表包并重新安装了表包,然后对我来说很好

答案 2 :(得分:0)

遇到了类似的问题,搞了半天。 就这一点而言,问题出在 tables 包中,至少对我来说是这样。

tables 包已损坏。我通过 conda 卸载它并删除剩余的目录(必要的,所有以tables命名的目录;路径可以从错误信息中获得) 然后我通过“pip”重新安装,因为我的“conda”频道没有它。

有趣的是,'pip' 使我感到温暖,我的 h5py(2.8.0) 已过时,并建议我将其更新到 2.10.0 以用于 scanpy。 (事实上​​,scanpy 可以很好地工作)

如果你这样做了,恭喜,tables 又坏了。 似乎 h5py(2.10.0) 也会安装 tables(但它有 win10 中的错误) 另外,如果h5py得到ImportError: DLL load failed,也应该用类似的管道重新安装(手动删除)。

无论如何,scanpy 可以在 win10 scanpy==1.7.1 h5py==2.8.0 tables==3.4.4 中使用。 如果最后重新安装 tables,也许 h5py 2.10.0 也可以工作。