在Jupyter笔记本中出现导入错误:DLL加载失败,但在.py文件中可以正常工作。

24
我在Anaconda环境中安装了BreakoutDetection模块。当我尝试在Jupyter笔记本中使用import breakout_detection 导入该模块时,出现以下错误。

我在Anaconda环境中安装了BreakoutDetection 模块。当在Jupyter笔记本中使用import breakout_detection 导入该模块时,会出现以下错误。

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-18-96c0fdb15b96> in <module>()
----> 1 import breakout_detection

C:\Users\sgadiyar\AppData\Local\Continuum\Anaconda2\lib\site-packages\breakout_detection.py in <module>()
     15         except ImportError:
     16             return importlib.import_module('_breakout_detection')
---> 17     _breakout_detection = swig_import_helper()
     18     del swig_import_helper
     19 elif _swig_python_version_info >= (2, 6, 0):

C:\Users\sgadiyar\AppData\Local\Continuum\Anaconda2\lib\site-packages\breakout_detection.py in swig_import_helper()
     14             return importlib.import_module(mname)
     15         except ImportError:
---> 16             return importlib.import_module('_breakout_detection')
     17     _breakout_detection = swig_import_helper()
     18     del swig_import_helper

C:\Users\sgadiyar\AppData\Local\Continuum\Anaconda2\lib\importlib\__init__.pyc in import_module(name, package)
     35             level += 1
     36         name = _resolve_name(name[level:], package, level)
---> 37     __import__(name)
     38     return sys.modules[name]

ImportError: DLL load failed: The specified procedure could not be found.

我可以在Python shell中导入同一个模块。

我查看了系统路径(print sys.path),在Python shell和Jupyter Notebook中路径是相同的。可执行路径(print sys.executable)也是相同的。

有人能帮我解决这个问题吗?谢谢!

10个回答

64

我在PowerShell中运行Jupyter Notebook时遇到了相同的问题。虽然这个问题是一年前提出的,但我的回答可以帮助那些最近遇到相同错误的人。在我的情况下,首先我激活了根环境 activate base 然后我运行了 jupyter notebook,它正常工作。一旦你激活base, 你会注意到提示会变成这样: (base) X:\Users\xxxxx\current-directory-name>.

  • 注意,activate base 命令在 PowerShell 中不起作用。你必须切换到命令提示符运行 cmd 或者你可以尝试在命令提示符中完成整个操作,而不是在PowerShell中。

  • 如果所需路径(path:\to\Anaconda3\;path:\to\Anaconda3\Scripts;path:\to\Anaconda3\Library\mingw-w64\bin;path:\to\Anaconda3\Library\usr\bin;path:\to\Anaconda3\Library\bin)对于您的PowerShell环境是可用的,则您无需激活 "base" 环境。


1
这对我有用。注意:对于Windows Server(2016 Datacenter),您可以跳过path:\to\Anaconda3\Library\usr\bin。 - Andrew
我每次运行笔记本电脑时都需要激活基础包吗? - user3065757
1
如果您想切换到除基本环境之外的其他环境,该怎么办? - user42493
2
Anaconda 的主要目的是拥有不同的工作环境。因此,仅在基本环境中运行 Jupyter 并不是解决方案。 - SomJura
2
我所做的就是将目录添加到PATH变量中,这对我来说很有效。 - praty
2
谢谢你的回答。我漏掉了“激活基础”。 - Taha

31

在Windows中,首先通过命令提示符激活根(base):

activate root

然后

jupyter notebook

1
虽然这样可以工作,但我的问题是“为什么我必须激活环境?”我以前不需要这样做。 - ScottieB
3
@ScottieB 我认为这是一项新的强制性功能,用于更好地控制环境。仅此而已。 - Dheeraj Inampudi

7
我最近将Anaconda重新安装到一个新目录(从D盘到C盘)。此后,在Windows 10中打开和运行PowerShell会导致它报相同的错误。
通过按照@picklu的答案,我能够在CMD中临时运行它(通过运行“activate base”,然后运行“jupyter notebook”)。甚至“activate root”也能代替“activate base”。还可以从conda提示符、anaconda navigator和Jupyter Notebook默认快捷方式运行。但是,使用这些方法,我无法从我已经打开PowerShell窗口的文件夹开始(通过使用Ctrl + Shift +鼠标右键单击)。
然而,通过遵循@picklu答案的第二部分,我成功地将系统变量PATH从旧的D驱动器更改为当前的C。
我添加了以下内容:
1. c:\users\USERNAME\anaconda3 2. c:\users\USERNAME\anaconda3\scripts 3. c:\users\USERNAME\anaconda3\library\bin 4. c:\users\USERNAME\anaconda3\library\usr\bin
其中c:\users\USERNAME\anaconda3是anaconda的安装位置。

1
你似乎在暗示Picklu的回答是正确的... 这应该是一条评论,而不是一个独立的回答,因为你没有提出新的建议。 - Akber Iqbal
谢谢!我尝试了所有的方法,但是添加所有路径对我有用。 - user3065757
这一直是我的猜想。感谢您将其作为单独的答案详细说明。 - ledawg

5
如果您已经将Anaconda添加到PATH变量中,那么您需要执行以下操作: activate base jupyter kernelspec list python -m ipykernel install --user 这对我来说有效。

3

当我导入sklearn时,我遇到了同样的问题。我猜需要升级一些包,所以我只运行(conda update --all)来升级所有的包,最后终于成功了。


1

我尝试了以上所有解决方案,但在安装了最新版本的Microsoft Visual C++之前都没有起作用。


1

无论在哪个虚拟环境中出现问题,只需使用以下命令激活环境:

conda activate <env-name>

然后使用以下命令重新安装笔记本:

pip install notebook

在我从Windows 10升级到Windows 11之前,它在基础环境和虚拟环境中都运行良好。


谢谢Arun。这很简单。我的环境适用于“base”,但不适用于另一个。 - jamiel22

0
如果我们查看Anaconda FAQ,我们可以发现不推荐将Anaconda添加到Windows PATH。
虽然它应该能够工作,但手动管理所有所需的路径并不容易和直接。例如,在我撰写本文时,这里的任何答案都没有我的机器上Anaconda添加的所有路径。我们可以使用os模块获取列表:
对于Python 2:
Python 2.7.15 |Anaconda, Inc.| (default, Feb 21 2019, 11:55:13) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print os.environ['PATH']

对于Python 3:

Python 3.7.2 (default, Feb 21 2019, 17:35:59) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print(os.environ['PATH'])

就我而言,我在其中有以下Anaconda路径:

C:\Anaconda;
C:\Anaconda\Library\mingw-w64\bin;
C:\Anaconda\Library\usr\bin;
C:\Anaconda\Library\bin;
C:\Anaconda\Scripts;
C:\Anaconda\bin;
C:\Anaconda\condabin;

这只是针对基本环境的情况。如果您有其他环境,每个环境都会有类似的路径。您真的想要添加它们全部,更新它们,并确保您没有错过任何内容,如果新的Anaconda版本更改了某些内容吗?

我怀疑。好消息是您不必这样做。当您激活环境时,所有路径都会自动配置。

只有将Scripts文件夹添加到PATH中才有用,这样您就可以无需完整路径运行activate。然后,为Python解释器或Jupyter Notebook创建一堆.bat/.cmd文件可能很方便,这将简化环境激活并允许您使用一个命令完成所有操作。

例如,我在我的计算机上有两个.cmd文件,分别用于Python 2和Python 3解释器:

python.cmd:

@echo off
call activate
python %*

python3.cmd:

@echo off
call activate python37
python %*

一个包含这些文件的文件夹被添加到PATH中,因此当我运行pythonpython3命令时,相关的conda环境会被激活,并且Python解释器会在适当的上下文中启动。如果您将cmdline参数传递给解释器,它们也会被正确转发。类似的脚本也可以为Jupyter创建。

0

我通过将文件C:\Anaconda3\Libary\bin\sqlite3.dll复制到C:\Anaconda3\Dlls来解决了这个问题。


0

2步解决此问题。此解决方案适用于运行 Jupyter Notebook

打开cmdcmder并以管理员身份运行

  1. 然后输入此命令卸载pyzmq: pip uninstall pyzmq
  2. 再通过此命令重新下载pyzmq: pip install pyzmq

然后输入jupyter notebook


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接