最近我们想用python3重写我们的项目(现在它是py2.7)。我们主要使用scrapy从网站上获取数据,但我现在无法在py36中安装scrapy。
Running setup.py install for Twisted ... error
Exception:
Traceback (most recent call last):
File "e:\python_envs\crawler36\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 0xd5 in position 24: invalid continuation byte
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "e:\python_envs\crawler36\lib\site-packages\pip\basecommand.py", line 215, in main
status = self.run(options, args)
File "e:\python_envs\crawler36\lib\site-packages\pip\commands\install.py", line 342, in run
prefix=options.prefix_path,
File "e:\python_envs\crawler36\lib\site-packages\pip\req\req_set.py", line 784, in install
**kwargs
File "e:\python_envs\crawler36\lib\site-packages\pip\req\req_install.py", line 878, in install
spinner=spinner,
File "e:\python_envs\crawler36\lib\site-packages\pip\utils\__init__.py", line 676, in call_subprocess
line = console_to_str(proc.stdout.readline())
File "e:\python_envs\crawler36\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 0xd5 in position 24: invalid continuation byte
似乎问题是扭曲的。我试图安装twisted也得到了同样的例外。其他人告诉我安装twisted.whl,但我在网上找不到这个文件。
请帮忙。
答案 0 :(得分:2)
来自GitHub上Twisted的Installation Requirements, 看起来它还不兼容Python 3.6:
要安装Twisted,您需要:
Python 2.7(完整功能)或3.3 / 3.4 / 3.5(功能子集)。
的确,在Python 3.6 changelog中,您可以看到:
PEP 528和PEP 529,Windows文件系统和控制台编码更改为UTF-8。
这会影响sys.__stdout__.encoding
返回的值,这会导致您在堆栈跟踪中看到的UnicodeDecodeError
。
因此我建议您继续使用Python 3.5直到Twisted更新以支持Python 3.6。如果您真的不能,作为最后的手段尝试在非Windows环境(例如虚拟机)中设置项目,或者通过将PYTHONIOENCODING环境变量设置为使用的sys.__stdout__.encoding
来解决此问题在升级到3.6之前返回。但它有缺点,它可能不起作用,无论如何可能还有其他不兼容性。