今天在公司里安装flask的时候,一切正常,能够正常import flaskpython
可是回到家里,却莫名其妙的报错了。flask
Exception: Traceback (most recent call last): File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\compat\__init__.py", line 73, in console_to_str return s.decode(sys.__stdout__.encoding) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 33: invalid start byte During handling of the above exception, another exception occurred: Traceback (most recent call last): File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\basecommand.py", line 216, in main status = self.run(options, args) File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\commands\install.py", line 342, in run prefix=options.prefix_path, File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\req\req_set.py", line 784, in install **kwargs File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\req\req_install.py", line 878, in install spinner=spinner, File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\utils\__init__.py", line 676, in call_subprocess line = console_to_str(proc.stdout.readline()) File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\compat\__init__.py", line 75, in console_to_str return s.decode('utf_8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 33: invalid start byte
报错大概是这样的,总之我开始是没怎么看报错信息,而后去百度查了一大堆。结果发现除了有一位csdn的博主:nankaizhl的报错可能和我差很少,其余就没怎么找到,包括stackoverflow。ruby
也不知道今天是吃错药了仍是咋的,我居然没有当即放弃,按照nankaizhl的一些说明,改了之后发现没有用,直接报错了。app
python3里面好像都没有reload这个函数了。函数
难道我就只能在公司电脑里学python?学习
我只能硬着头皮去啃报错的traceback了。编码
咱们仔细看下。spa
python先是在解决某个异常后,又发现了一个异常。有意思的是,另一个异常,往回追溯,回到了同一个文件。.net
File "c:\users\ruby\appdata\local\programs\python\python36\lib\site-packages\pip\compat\__init__.py"
没办法,只能带着恐惧来看python安装包里的py代码了。
但python解释器颇有好的给出了报错行数。
我把相关行截出来。
if sys.version_info >= (3,): def console_to_str(s): try: return s.decode(sys.__stdout__.encoding) # except UnicodeDecodeError: return s.decode('utf-8') #
报错的2个#的那一行。code
这个语法是一个异常处理的,难怪会报错来自同一个文件,这里很简单的说明了若是不能正常编码的话,就用utf-8编码。
而后看traceback里的信息,代表,即便用utf-8编码也不行,对于中国电脑来收,通常就是路径里面有中文。
虽然说咱们也能够找一下哪些路径有中文,但我没这个水平。
很天然的一个修改的是,把这个改为下面这样,用gbk的中文编码。
if sys.version_info >= (3,): def console_to_str(s): try: return s.decode(sys.__stdout__.encoding) except UnicodeDecodeError: return s.decode('gbk') #
未免改后有问题,我在后面加了一个#。
结果正常了。
补充一点还可能出问题的是,pip安装flask报错后,你再次pip install flask,会返回你安装成功的信息。
好像也不是安装成功,更准确的说法是没有报错,但这时你import flask会报错,以下:
我这里的报错显示的很清晰,没有markupsafe._compat这个module。
因此我原本是想先pip uninstall flask,可是很遗憾,这样并不能把MarkupSafe卸载掉。
你须要pip uninstall MarkupSafe才行,而后把上面的编码改为gbk后,再pip install flask。
这样就没问题了,而后咱们就一块儿去学习flask吧。