首页 > 解决方案 > Python 3.8:从基本目录的 Jupyter Notebook 运行不同的 Python 环境时出错

问题描述

我最近不得不重新格式化我的工作计算机,并重新安装 Anaconda。我通常保持 Anaconda 的根(base)文件夹不变,并在我需要使用专业 Python 模块而不是弄乱环境时创建单独的(base)环境。

过去,我能够从安装在环境中的 Jupyter Notebook 成功运行这些不同的(base)环境。我会通过ipykernel在新环境中安装(例如my-env)来实现,然后运行以下命令:

(base)    activate my-env
(my-env)  conda install ipykernel
(my-env)  python -m ipykernel install --name "my-env" --display-name "My Python"

这将成功完成,并给我以下消息:

Installed kernelspec my-env in C:\ProgramData\jupyter\kernels\my-env

但是,当我尝试使用标准命令测试 Jupyter Notebook 中的链接时import matplotlib.pyplot as plt,我收到以下错误消息:

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-a0d2faabd9e9> in <module>
----> 1 import matplotlib.pyplot as plt

C:\Anaconda3\envs\my-env\lib\site-packages\matplotlib\__init__.py in <module>
    105 # cbook must import matplotlib only within function
    106 # definitions, so it is safe to import from it here.
--> 107 from . import cbook, rcsetup
    108 from matplotlib.cbook import MatplotlibDeprecationWarning, sanitize_sequence
    109 from matplotlib.cbook import mplDeprecation  # deprecated

C:\Anaconda3\envs\my-env\lib\site-packages\matplotlib\cbook\__init__.py in <module>
     26 import weakref
     27 
---> 28 import numpy as np
     29 
     30 import matplotlib

C:\Anaconda3\envs\my-env\lib\site-packages\numpy\__init__.py in <module>
    141     from .core import *
    142     from . import compat
--> 143     from . import lib
    144     # NOTE: to be revisited following future namespace cleanup.
    145     # See gh-14454 and gh-15672 for discussion.

C:\Anaconda3\envs\my-env\lib\site-packages\numpy\lib\__init__.py in <module>
     23 # Private submodules
     24 from .type_check import *
---> 25 from .index_tricks import *
     26 from .function_base import *
     27 from .nanfunctions import *

C:\Anaconda3\envs\my-env\lib\site-packages\numpy\lib\index_tricks.py in <module>
      9 from numpy.core.numerictypes import find_common_type, issubdtype
     10 
---> 11 import numpy.matrixlib as matrixlib
     12 from .function_base import diff
     13 from numpy.core.multiarray import ravel_multi_index, unravel_index

C:\Anaconda3\envs\my-env\lib\site-packages\numpy\matrixlib\__init__.py in <module>
      2 
      3 """
----> 4 from .defmatrix import *
      5 
      6 __all__ = defmatrix.__all__

C:\Anaconda3\envs\my-env\lib\site-packages\numpy\matrixlib\defmatrix.py in <module>
      9 # While not in __all__, matrix_power used to be defined here, so we import
     10 # it for backward compatibility.
---> 11 from numpy.linalg import matrix_power
     12 
     13 

C:\Anaconda3\envs\my-env\lib\site-packages\numpy\linalg\__init__.py in <module>
     71 """
     72 # To get sub-modules
---> 73 from .linalg import *
     74 
     75 from numpy._pytesttester import PytestTester

C:\Anaconda3\envs\my-env\lib\site-packages\numpy\linalg\linalg.py in <module>
     31 from numpy.core import overrides
     32 from numpy.lib.twodim_base import triu, eye
---> 33 from numpy.linalg import lapack_lite, _umath_linalg
     34 
     35 

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

有人可以告诉我可能是什么问题吗?如果有帮助,我的(base)环境有python3.8.3notebook版本和 6.0.3 版本,而我的新my-env环境有从 conda-forge 下载的模块。它有一个python版本 3.7.8 和一个ipykernel版本 5.3.4。

提前致谢!

更新 2020 年 10 月 26 日 根据要求,我已经包含了我在(base)环境和(my-env)环境中拥有的模块列表。一般来说,模块中的包(base)一直在更新anaconda,而模块中的包(my-env)相对于hyperspy存储在conda-forge存储库中的 保持最新。

我为他们创建了 PasteBin 条目,因为它们超出了这篇文章的字符数限制。

链接到模块列表(base)

链接到模块列表(my-env)

matplotlib例如,我还尝试导入and以外的模块numpy,并且能够导入abc并且time没有问题。这似乎是Jupyter Notebook 版本与环境中找到的(base)不兼容的问题。numpy(my-env)

标签: python-3.xjupyter-notebook

解决方案


错误消息表明错误是由numpy库引起的。您的 (base) 和 (my-env) 之间的 Python 和 Ipkernel 版本不同的事实进一步表明您的环境之间存在不兼容性。

你能提供来自的输出吗

康达清单

从每个环境?

当我尝试创建 Python=3.8.3 环境时,安装的 numpy 版本是 numpy-1.19.2-py38hf89b668_1
我使用了命令

conda create -n foo -c conda-forge python=3.8.3 numpy

当我尝试创建 Python=3.7.8 环境时,安装的 numpy 版本是 numpy-1.19.2-py37h7008fea_1 我使用了命令

conda create -n foo -c conda-forge python=3.7.8 numpy

另外,为什么不考虑在每个环境中安装与各自版本的 Python 一致的 ipkernel/jupyter notebook 库呢?这始终是确保依赖关系正确对齐的最佳解决方案。

我还尝试在没有指定版本号的情况下将 ipykernel 与ipykernel一起安装在 python=3.8.3 和 python=3.7.8 中。

以下是 conda 自动选择的 ipykernel 版本 for python = 3.8.3: ipykernel-5.3.4 | py38h1cdfbd6_1

对于 python=3.7.8:ipykernel-5.3.4 | py37hc6149b9_1

从你写的你的ipykernel版本是不同的。我确实认为这种差异很可能来自ipykernel版本的这些差异

检查环境时,请验证ipykernel的通道源是否相同。

一种解决方案:考虑将(基础)中的 ipykernel 降级到 5.3.4 版本。


推荐阅读