Python:" ModuleNotFoundError",但模块已安装?

时间:2017-08-15 13:03:11

标签: python matplotlib module anaconda python-module

我意识到这似乎是一个普遍的问题,但所有答案都指向了两个同时发生的python安装 - 我已经卸载了另一个。

目前我运行我的代码来自 PyCharm 2017.1.5 (windows 10),Python解释器设置为Python 3.6.1 (C:\Anaconda3\python.exe),即我安装了 Anaconda3 ,其中包括matplotlib,使用 Ananconda3 -interpreter从 PyCharm 运行。

我已在 Anaconda Navigator 中检查了matplotlib 2.0.2已安装在环境中。

最小(非工作)示例:

import matplotlib.pyplot as plt

plt.plot(range(10))
plt.show()

返回以下错误:

C:\Anaconda3\python.exe C:/Users/John/Documents/CPU/master/untitled/main11.py
Traceback (most recent call last):
  File "C:/Users/John/Documents/CPU/master/untitled/main11.py", line 1, in <module>
    import matplotlib.pyplot as plt
  File "C:\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 29, in <module>
    import matplotlib.colorbar
  File "C:\Anaconda3\lib\site-packages\matplotlib\colorbar.py", line 34, in <module>
    import matplotlib.collections as collections
  File "C:\Anaconda3\lib\site-packages\matplotlib\collections.py", line 37, in <module>
    import matplotlib.lines as mlines
  File "C:\Anaconda3\lib\site-packages\matplotlib\lines.py", line 28, in <module>
    from matplotlib.markers import MarkerStyle
ModuleNotFoundError: No module named 'matplotlib.markers'

Process finished with exit code 1

这个在2周前运行良好,但现在不行。据我所知,我没有改变或更新任何东西。模块正确加载,但它似乎是模块内容的变化?如果是这样:这是怎么发生的,我该如何解决?

5 个答案:

答案 0 :(得分:2)

@ImportanceOfBeingErnest带领我朝着正确的方向前进。我在这里发布我的解决方案。其他人可能会找到答案。问题是磁盘扇区损坏 - 不太可能发生。

问题确实在matplotlib - 包本身。回顾一下,指向该问题的指标是预先分发的包中的错误不应该存在。如果他们这样做,外部环境必定已经损坏,问题不在于Python安装本身。

我使用matplotlib通过 Anaconda提示卸载了conda remove matplotlib并重新安装了conda install matplotlib。这给了我这个错误:

(C:\Anaconda3) C:\Users\John>conda install matplotlib
[...]
ERROR conda.core.link:_execute_actions(337): An error occurred while installing package 'defaults::matplotlib-2.0.2-np112py36_0'.
OSError(22, 'Invalid argument') Attempting to roll back. 

OSError(22, 'Invalid argument')

在@ Ernest的评论之前,我认为这可能与non-ASCII in PATH or similar有关。

相反,我尝试完全重新安装 Anaconda3 ,重新启动并发现Anaconda3文件夹的一部分未被删除(包含matplotlib的文件夹。)

手动删除它会导致Windows错误0x80070570。在this post on ServerFault(对OP的评论)后,我运行了一个检查,然后从 Windows资源管理器GUI 进行修复:右键单击此PC 中的驱动器 - &GT; 属性 - &gt;标签工具 - &gt; 检查(如果发现任何错误,则会出现修复)。

重新启动后,从头开始重新安装 Anaconda3 并重新启动,我又能够运行我的项目了!

答案 1 :(得分:2)

对于我来说,我可以通过将PYTHONPATH设置为所需软件包所在的site-packages文件夹的路径(不包括site-pacages)来修复它。

我使用一个pyenv虚拟环境,该虚拟环境的路径为/home/apk/.pyenv/versions/python-3-7-4。激活环境后,pip会将软件包安装到/home/apk/.pyenv/versions/python-3-7-4/lib/python3.7/site-packages。因此,在终端中,我设置了:

$ PYTHONPATH=/home/apk/.pyenv/versions/python-3-7-4/lib/python3.7/

对于Windows安装python,也应如此。 如果使用虚拟环境,则可以编辑activate脚本以设置PYTHONPATH

完成之后,我签入了python shell。

$ python
Python 3.7.4 (default, Feb  5 2020, 17:11:33) 
[GCC 5.5.0 20171010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/apk/.pyenv/versions/3.7.4/lib/python37.zip', '/home/apk/.pyenv/versions/3.7.4/lib/python3.7', '/home/apk/.pyenv/versions/3.7.4/lib/python3.7/lib-dynload', '/home/apk/.pyenv/versions/python-3-7-4/lib/python3.7']
>>> sys.executable
'/home/apk/.pyenv/versions/python-3-7-4/bin/python'

祝你好运!

参考文献

答案 2 :(得分:1)

很难直接回答这个问题,但是,我在使用PyCharm和Anaconda的公司Windows环境中看到了大量问题,这些是您可能遇到的一些问题

  1. 检查PATH是否正确指向所有Anaconda位置

    import sys
    sys.path
    
  2. 检查您的文件是否已由IT团队迁移到C:\Users\username\AppData\Roaming

  3. 为任何python发行版清除系统。您可能在内部使用的软件分发包装了自己的python分发版。这通常可以包含在PATH中。另一个例子可能是将Anaconda安装到C:\,但也已将其安装在Users\Local\AppData'C:\Program Files'个月之前并且已被遗忘!
  4. 直接调试问题的一种好方法是导航到ipython

    中的以下目录
    C:\Anaconda3\lib\site-packages\matplotlib
    

    他们尝试import matplotlib.markers

    如果失败则可以尝试

    import matplotlib
    matplotlib.__file__
    

    你应该检查这个结果是否给出了

    'C:\\Anaconda3\\lib\\site-packages\\matplotlib\\__init__.pyc'
    

    因为很可能会安装另一个matplotlib版本,该版本优先。这将属于上述问题之一,以便纠正。

答案 3 :(得分:0)

PyCharm需要安装解释器中可用的包。

您可以使用以下步骤找到可用于安装的matplotlib和其他软件包:

  1. 打开文件 - 设置 - 项目 - 项目解释器菜单。
  2. 您应该会看到当前安装的所有软件包,并且此列表中应该缺少matplotlib。
  3. 单击右侧的+(添加)按钮并安装matplotlib软件包。
  4. 完成后,关闭顶部对话框,您应该在已安装的软件包列表中看到matplotlib。

答案 4 :(得分:0)

使用pip时遇到相同类型的错误。创建了新的VENV并执行了解决我问题的应用agaist