파이썬 - ImportError: cannot import name ...
ImportError가 나면 어쨌든 없는 것이니, 해당 패키지를 찾든가 아니면 대체 패키지를 구해야 합니다. 가령, Python 2.7의 경우 아래의 라인에서,
from urllib import parse
이런 오류가 발생합니다.
ImportError: cannot import name parse
해당 코드는 3.x에서는 잘 동작하는데요, 굳이 어떤 차이점이 있나 알고 싶다면 추적을 해보면 됩니다. 우선, 해당 모듈의 경로를 구하면 되는데요,
import urllib
print(urllib.__file__)
// 2.7 출력: /usr/lib/python2.7/urllib.pyc
// 3.8 출력: /usr/lib/python3.8/urllib/__init__.py
3.8의 경우 해당 경로를 보면,
$ ls -l /usr/lib/python3.8/urllib
total 168
-rw-r--r-- 1 root root 0 Mar 15 21:22 __init__.py
drwxr-xr-x 2 root root 4096 Apr 3 09:35 __pycache__
-rw-r--r-- 1 root root 2632 Mar 15 21:22 error.py
-rw-r--r-- 1 root root 42296 Mar 15 21:22 parse.py
-rw-r--r-- 1 root root 101586 Mar 15 21:22 request.py
-rw-r--r-- 1 root root 2299 Mar 15 21:22 response.py
-rw-r--r-- 1 root root 9424 Mar 15 21:22 robotparser.py
parse.py가 포함돼 있습니다. 반면 2.7 경로를 보면, python2.7 디렉터리에 단일 파일로만 존재합니다.
$ ls -l /usr/lib/python2.7/urllib.py
-rw-r--r-- 1 root root 60093 Mar 18 22:21 /usr/lib/python2.7/urllib.py
결국 없는 것을 확인한 것에 불과합니다. 따라서 관련 기능을 찾아서,
url.parse Python2.7 equivalent
; https://stackoverflow.com/questions/50638366/url-parse-python2-7-equivalent
대체하는 식으로 해결해야 합니다. (아니면, 만들거나!)
from urlparse import urlparse
parsed_url = urlparse(url)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]