gpt4 book ai didi

windows - 导入 matplotlib.pyplot 时出错(在 Anaconda3 for Windows 10 Home 64-bit PC 上)

转载 作者:可可西里 更新时间:2023-11-01 12:18:39 28 4
gpt4 key购买 nike

我最近在我的 Windows 10 家庭版(64 位)机器上安装了“Anaconda3 for Windows v2.4.0”。

(我从 https://www.continuum.io/downloads 下载了 Windows 64 位图形安装程序“Anaconda3-2.4.0-Windows-x86_64.exe”(392 MB)。)

在命令提示符窗口中,我进行了 conda“测试驱动”,包括“conda 更新 conda”等。最后,我看到以下内容:

C:\Users\Anshul\Downloads\Python>conda update conda
Fetching package metadata: ....
# All requested packages already installed.
# packages in environment at C:\Anaconda3:
#
conda 3.18.6 py35_0 defaults

C:\Users\Anshul\Downloads\Python>conda list matplotlib
# packages in environment at C:\Anaconda3:
#
matplotlib 1.5.0 np110py35_0 defaults

安装似乎已经成功——例如:

C:\Users\Anshul\Downloads\Python>python
Python 3.5.0 |Anaconda 2.4.0 (64-bit)| (default, Nov 7 2015, 13:15:24) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello World")
Hello World
>>> import os
>>> os.getcwd()
'C:\\Users\\Anshul\\Downloads\\Python'
>>> import matplotlib as mpl
>>> print(mpl.__version__)
1.5.0
>>>

请注意,上面导入的 matplotlib 很好。但是,当我尝试导入“matplotlib.pyplot”时收到一条错误消息,如下所示:

>>> import matplotlib.pyplot as pp
Traceback (most recent call last):
File "C:\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 1412, in <module>
fontManager = pickle_load(_fmcache)
File "C:\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 963, in pickle_load
with open(filename, 'rb') as fh:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Anshul\\.matplotlib\\fontList.py3k.cache'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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 27, in <module>
import matplotlib.backend_bases as backend_bases
File "C:\Anaconda3\lib\site-packages\matplotlib\backend_bases.py", line 62, in <module>
import matplotlib.textpath as textpath
File "C:\Anaconda3\lib\site-packages\matplotlib\textpath.py", line 15, in <module>
import matplotlib.font_manager as font_manager
File "C:\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 1420, in <module>
_rebuild()
File "C:\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 1405, in _rebuild
fontManager = FontManager()
File "C:\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 1043, in __init__
self.ttffiles = findSystemFonts(paths) + findSystemFonts()
File "C:\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 312, in findSystemFonts
for f in win32InstalledFonts(fontdir):
File "C:\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 231, in win32InstalledFonts
direc = os.path.abspath(direc).lower()
File "C:\Anaconda3\lib\ntpath.py", line 535, in abspath
path = _getfullpathname(path)
ValueError: _getfullpathname: embedded null character
>>>

我在文本编辑器中打开“C:\Anaconda3\lib\site-packages\matplotlib\font_manager.py”并试图寻找错误的来源。我认为这是出了问题的地方:

>>> mpl.get_cachedir()
'C:\\Users\\Anshul\\.matplotlib'
>>> mpl.get_configdir()
'C:\\Users\\Anshul\\.matplotlib'
>>>

在 Windows 资源管理器中,我看到“C:\Users\Anshul.matplotlib”文件夹是空的,因此“fontList.py3k.cache”文件的 FileNotFoundError(我不知道在“C:\Anaconda3”目录中也看不到任何地方)。这似乎是安装程序的问题(我认为),但我不知道如何解决。如果有任何帮助或指点,我将不胜感激。

(顺便说一句,我已经尝试用谷歌搜索这个问题。最接近的问题是在 2013 年报告的:fail to import matplotlib.pyplot #2320。它涉及在 Windows 7 64 位计算机上安装 WinPython-64bit-3.3.2.2。该线程已关闭,评论为:“正在关闭。已在 master 中修复。”,但问题似乎又出现了。我希望有一个简单的修复或解决方法。)

谢谢,
安舒尔

最佳答案

这是 python 中的错误,而不是 matplotlib 中的错误。

问题是 winreg.EnumValue 出于某种原因没有正确切割字符串值,并且字符串将包含空字符,而 os.path.abspath 是无法处理。

发生这种情况的注册表项位于 SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts。尽管这不是 matplotlib 的错,我们仍然可以临时修补它,使其在 '\0' 处结束字符串。在 font_manager.py 中,将 win32InstalledFonts() 函数中的第 310 行修补为:

key, direc, any = winreg.EnumValue( local, j)
if not is_string_like(direc):
continue
if not os.path.dirname(direc):
direc = os.path.join(directory, direc)
direc = direc.split('\0', 1)[0]

关于windows - 导入 matplotlib.pyplot 时出错(在 Anaconda3 for Windows 10 Home 64-bit PC 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34004063/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com