파이썬에 관련된 코드를 실행 도중, urllib에서 에러가 발생하였다.
실행코드
import os
import tarfile
import urllib
DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml2/master/"
HOUSING_PATH = os.path.join("datasets", "housing")
HOUSING_URL = DOWNLOAD_ROOT + "datasets/housing/housing.tgz"
def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):
os.makedirs(housing_path, exist_ok=True)
tgz_path = os.path.join(housing_path, "housing.tgz")
urllib.request.urlretrieve(housing_url, tgz_path)
housing_tgz = tarfile.open(tgz_path)
housing_tgz.extractall(path=housing_path)
housing_tgz.close()
fetch_housing_data(HOUSING_URL, HOUSING_PATH)
에러내용
Traceback (most recent call last):
File "D:/Study/Python/study01.py", line 18, in <module>
fetch_housing_data(HOUSING_URL, HOUSING_PATH)
File "D:/Study/Python/study01.py", line 13, in fetch_housing_data
urllib.request.urlretrieve(housing_url, tgz_path)
AttributeError: module 'urllib' has no attribute 'request'
스택오버플로우 관련 내용
내용을 보면, urllib의 _init_.py가 비어 있어서, urllib만 생성해서는 액세스를 할 수 없다는 의미이다. 즉, 이런 경우 urllib 다음의 request까지 import로 선언해야 된다는 의미였다.
수정 부분
import urllib.request as urllib
urllib.urlretrieve(housing_url, tgz_path)
urllib.request을 import 하였고, urllib.request.urlretrieve를 urllib.urlretrieve로 변환하니 이상없이 동작하였다.
반응형