본문으로 바로가기

matplotlib import 시, 에러 발생 대처방법

category CAE/Enjoy Programming 2017. 3. 31. 14:44

그래프를 그리기 위해 파이썬 쉘에 import 함수를 실행하자 아래와 같은 에러가 발생하였다.

ValueError: _getfullpathname: embedded null character in path

In[2]: import matplotlib.pyplot as plt

Traceback (most recent call last):
  File "D:\ProgramData\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 1429, in <module>
    fontManager = pickle_load(_fmcache)
  File "D:\ProgramData\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 965, in pickle_load
    with open(filename, 'rb') as fh:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\i0212011\\.matplotlib\\fontList.py3k.cache'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "D:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2881, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-eff513f636fd>", line 1, in <module>
    import matplotlib.pyplot as plt
  File "D:\ProgramData\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 29, in <module>
    import matplotlib.colorbar
  File "D:\ProgramData\Anaconda3\lib\site-packages\matplotlib\colorbar.py", line 36, in <module>
    import matplotlib.contour as contour
  File "D:\ProgramData\Anaconda3\lib\site-packages\matplotlib\contour.py", line 22, in <module>
    import matplotlib.font_manager as font_manager
  File "D:\ProgramData\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 1439, in <module>
    _rebuild()
  File "D:\ProgramData\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 1418, in _rebuild
    fontManager = FontManager()
  File "D:\ProgramData\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 1053, in __init__
    self.ttffiles = findSystemFonts(paths) + findSystemFonts()
  File "D:\ProgramData\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 325, in findSystemFonts
    for f in win32InstalledFonts(fontdir):
  File "D:\ProgramData\Anaconda3\lib\site-packages\matplotlib\font_manager.py", line 241, in win32InstalledFonts
    direc = os.path.abspath(direc).lower()
  File "D:\ProgramData\Anaconda3\lib\ntpath.py", line 544, in abspath
    path = _getfullpathname(path)

ValueError: _getfullpathname: embedded null character in path

matplotlib의 버그라고 생각하고 matplotlib을 다시 설치해 보았으나 여전히 문제는 계속되었다.

구글링해보니 matplotlib의 버그가 아니고 python의 버그라고 한다.


해결 방법

1. font_manager.py 파일을 열고 winreg.EnumValue 를 검색한다.

2. 주변 코드를 아래와 같이 수정한다.

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]