Python:"ModuleNotFoundError",但是模块安装了吗?

Python: "ModuleNotFoundError", but module is installed?

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

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

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

一个最小的(非工作)示例:

import matplotlib.pyplot as plt

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

Returns出现如下错误:

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

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

很难直接回答这个问题,但是,我在使用 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' 个月前就已安装并忘记了!

直接调试问题的一个好方法是导航到 ipython

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

他们尝试 import matplotlib.markers

如果失败,您可以尝试

import matplotlib
matplotlib.__file__

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

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

很可能会优先安装另一个 matplotlib 版本。这将属于上述问题之一,需要更正。

@ImportanceOfBeingErnest 引导我朝着正确的方向前进。我 post 我的解决方案在这里 s.t。其他人可能会找到答案。问题是损坏的磁盘扇区 - 不太可能的偶然事件。

问题确实出在 matplotlib 软件包本身。回顾过去,问题的指针是预分发包中的错误不应该存在。如果是这样,则外部环境一定已经损坏,问题不在于 Python 安装本身。

我使用 conda remove matplotlib 通过 Anaconda Prompt 卸载了 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 Explorer GUI 进行了修复:右键单击驱动器这台电脑 --> 属性 --> 选项卡工具 --> 检查修复如果发现任何错误出现)。

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

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

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

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

在我的例子中,我可以通过将 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/

python 的 Windows 安装也应如此。 如果使用虚拟环境,那么可以编辑 activate 脚本来设置 PYTHONPATH.

完成后,我签入了pythonshell。

$ 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'

祝你好运!

参考资料

使用 pip 时出现相同类型的错误。创建了新的 VENV 并执行解决了我的问题的应用程序