47.12 Windows에서 패키지 설치 에러 해결하기

Windows에서 pip로 패키지를 설치할 때 에러가 발생하는 경우가 많습니다. 예를 들어 다음은 notebook 패키지를 설치할 때 의존 패키지 중 MarkupSafe에서 에러가 난 상황입니다. 에러 메시지를 잘 보면 "Running setup.py install for MarkupSafe ..." 부분이 error로 표시됩니다.

C:\Users\dojang>pip install notebook
...생략...
  Running setup.py install for simplegeneric ... done
  Running setup.py install for pandocfilters ... done
  Running setup.py install for MarkupSafe ... error
Exception:
Traceback (most recent call last):
...생략...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 68: invalid start byte

이 문제를 해결하려면 MarkupSafe 패키지를 Windows 전용으로 만든 whl 파일을 설치해야 합니다(whl은 파이썬의 패키지 포맷이며 wheel의 약자인 whl을 확장자로 사용). 먼저 웹 브라우저를 실행하고 다음 주소로 이동합니다.

  • Python Extension Packages for Windows
    http://www.lfd.uci.edu/~gohlke/pythonlibs/

웹 사이트가 열리면 Ctrl+F를 눌러서 방금 에러가 발생했던 패키지인 MarkupSafe를 검색합니다. 그다음에 MarkupSafe가 나오면 링크를 클릭합니다.

그림 47-7 Unofficial Windows Binaries for Python Extension Packages에서 패키지 검색

링크를 클릭하면 MarkupSafe 패키지 항목으로 이동합니다. 여기에 MarkupSafe 패키지의 whl 파일들이 있는데 자신의 파이썬 버전과 플랫폼에 맞는 whl 파일을 다운로드합니다.

그림 47-8 Unofficial Windows Binaries for Python Extension Packages에서 whl 파일 받기

whl 파일은 패키지이름-패키지버전-파이썬버전-ABI태그-플랫폼태그.whl 형식으로 되어 있습니다. 예를 들어 cp36cp36m은 파이썬 3.6이라는 뜻이고, win32는 32비트 Windows, win_amd64는 64비트 Windows라는 뜻입니다(이후 새 파이썬 버전이 나오면 해당 버전에 맞춰서 새 whl 파일이 올라옵니다).

현재 설치된 파이썬의 버전을 확인하려면 명령 프롬프트(PowerShell)에서 python -V를 입력합니다.

C:\Users\dojang>python -V
Python 3.6.0

그리고 파이썬 플랫폼을 확인하려면 파이썬 셸에서 다음과 같이 실행합니다.

파이썬이 32비트일 경우

>>> import platform
>>> platform.architecture()
('32bit', 'WindowsPE')

파이썬이 64비트일 경우

>>> import platform
>>> platform.architecture()
('64bit', 'WindowsPE')

여기서는 파이썬 버전 3.6에 32비트라고 가정하고 MarkupSafe-1.0-cp36-cp36m-win32.whl을 받아서 설치하겠습니다(MarkupSafe의 버전은 시간이 지나면 달라질 수 있습니다). 받은 whl 파일을 설치하기 전에 앞에서 설치할 때 에러가 발생한 MarkupSafe 패키지를 삭제합니다.

C:\Users\dojang>pip uninstall -y MarkupSafe
Uninstalling MarkupSafe-1.0:
  Successfully uninstalled MarkupSafe-1.0

이제 pipwhl 파일을 설치 해줍니다(파일을 다운로드한 경로는 C:\Users\dojang\Downloads라고 가정).

C:\Users\dojang>pip install C:\Users\dojang\Downloads\MarkupSafe-1.0-cp36-cp36m-win32.whl
Processing c:\users\dojang\downloads\markupsafe-1.0-cp36-cp36m-win32.whl
Installing collected packages: MarkupSafe
Successfully installed MarkupSafe-1.0

여기서 끝이 아닙니다. 처음에 notebook 패키지를 설치하던 중간에 에러가 발생했으므로 notebook 패키지가 완전히 설치되지 않았습니다. 따라서 다음과 같이 notebook 패키지를 다시 설치해줍니다.

C:\Users\dojang>pip install notebook
Collecting notebook
...생략...
Installing collected packages: jinja2, mistune, nbconvert, notebook
Successfully installed jinja2-2.9.6 mistune-0.7.4 nbconvert-5.1.1 notebook-5.0.0

whl 파일로 MarkupSafe 패키지를 설치해 놓았으므로 notebook 패키지를 설치할 때 에러가 발생하지 않습니다. 이런 방식으로 Windows에서 pip로 패키지를 설치할 때 에러가 발생하는 문제를 해결할 수 있습니다.