์ฝ๊ฐ์ ๋๋ฒ๊น
ํ ๋ค์ ์ค๋ฅ๋ฅผ werkzeug/http.py#L26 ์ผ๋ก ์ขํ ImportError: cannot import name 'parse_http_list'
์์ธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋๋ ์ด์ ํ์ด์ฌ ์ฐธ์กฐ๋ก ํด๋ฐฑ์ ์๋ํ๋ ์์ธ ๋ด๋ถ์ ์์ธ๋ฅผ ํฌํจํ๋ ์ ์ฒด ์ญ์ถ์ ์
๋๋ค.
Traceback (most recent call last):
File "/usr/local/lib/python3.5/site-packages/werkzeug/http.py", line 26, in <module>
from urllib2 import parse_http_list as _parse_list_header
ImportError: No module named 'urllib2'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "examples/http.py", line 2, in <module>
from flask import Flask
File "/usr/local/lib/python3.5/site-packages/flask/__init__.py", line 17, in <module>
from werkzeug.exceptions import abort
File "/usr/local/lib/python3.5/site-packages/werkzeug/__init__.py", line 152, in <module>
__import__('werkzeug.exceptions')
File "/usr/local/lib/python3.5/site-packages/werkzeug/exceptions.py", line 71, in <module>
from werkzeug.wrappers import Response
File "/usr/local/lib/python3.5/site-packages/werkzeug/wrappers.py", line 26, in <module>
from werkzeug.http import HTTP_STATUS_CODES, \
File "/usr/local/lib/python3.5/site-packages/werkzeug/http.py", line 28, in <module>
from urllib.request import parse_http_list as _parse_list_header
File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 88, in <module>
import http.client
File "/Users/alexgurrola/Projects/intrepid/examples/http.py", line 2, in <module>
from flask import Flask
ImportError: cannot import name 'Flask'
์ด๋ฅผ ์ฌํํ ์ ์๋ ์๋ฅผ ์ ๊ณตํ์ญ์์ค.
Python 3.5.2๋ฅผ ์ฌ์ฉํ๋ฉด werkzeug/http.py
์ด ๋จ๋ฝ์ด ๋ฐ๋ณต์ ์ผ๋ก ์คํจํฉ๋๋ค.
try:
from urllib.request import parse_http_list as _parse_list_header
from urllib.parse import unquote_to_bytes as _unquote
except ImportError: # pragma: no cover
from urllib2 import parse_http_list as _parse_list_header, \
unquote as _unquote
๋ํ ์์ ์คํฌ๋ฆฝํธ๋ try/except
์๋ ๋ ๊น์ ์์ค์์ ๋ถํํ ๊ฒ์ด๋ฉฐ, ์ด๋ urllib๋ฅผ ์ฌ์ฉํ์ฌ ๋ด๋ถ API์ ๊ฐ๋ฅํ ๋ณ๊ฒฝ์ ๊ฒฝ๊ณ ํ์ต๋๋ค. ๋์์ด๋๋ค๋ฉด ์๋ Flask 0.12๋ฅผ ์ฌ์ฉํ๊ณ ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
import os
from flask import Flask
app = Flask(__name__)
app.config.from_object(os.environ['APP_SETTINGS'])
@app.route('/')
def hello():
return "Hello World!"
if __name__ == '__main__':
app.run()
ํ์ผ ์ด๋ฆ์ http.py์์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ์ญ์์ค. ๊ทธ๋ ์ง ์์ผ๋ฉด stdlib์ http ๋ชจ๋๊ณผ ์ถฉ๋ํฉ๋๋ค.
๋ถ๋ช ํ Python์ ๊ฐ์ ์ด๋ฆ์ ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌ๋ณํ ์ ์์ผ๋ฏ๋ก ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๊ฑฐ์ ์ถ๊ฒฉ์ ์ ๋ณด๋์ต๋๋ค... ๋์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
ํ์ผ ์ด๋ฆ์ http.py์์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ์ญ์์ค. ๊ทธ๋ ์ง ์์ผ๋ฉด stdlib์ http ๋ชจ๋๊ณผ ์ถฉ๋ํฉ๋๋ค.
๋๋ ํ์ด์ฌ์ ์ฒ์ ์ ํด์ ๊ฐ์ ์ค์๋ฅผ ์ ์ง๋ ๋ค....
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ์ผ ์ด๋ฆ์ http.py์์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ์ญ์์ค. ๊ทธ๋ ์ง ์์ผ๋ฉด stdlib์ http ๋ชจ๋๊ณผ ์ถฉ๋ํฉ๋๋ค.