【问题标题】:Running python setup.py install returns UnicodeDecodeError for some packages运行 python setup.py install 为某些包返回 UnicodeDecodeError
【发布时间】:2016-04-01 03:01:16
【问题描述】:
  • 我在 Windows 7 64 位上使用 Python 3.5.0
  • 我的用户名计算机全名都包含斯拉夫字符:ł
  • 因此这个字符在一些文件路径环境变量
  • 编辑:通常我的活动代码页是 852

我在尝试安装某些软件包(不是所有软件包)时在 CMD 上收到此错误:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x88 in position "some_number": character maps to <undefined>

lib2d 包示例:

C:\Python35\Scripts\lib2d-0.0.2> c:\python35\python.exe setup.py install
running install
running build
running build_py
running build_ext
building '_lib2d' extension
Traceback (most recent call last):
  File "setup.py", line 51, in <module>
    scripts=['scripts/premultiplyalpha.py']
  File "c:\python35\lib\distutils\core.py", line 148, in setup
    dist.run_commands()
  File "c:\python35\lib\distutils\dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "c:\python35\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "c:\python35\lib\distutils\command\install.py", line 539, in run
    self.run_command('build')
  File "c:\python35\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "c:\python35\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "c:\python35\lib\distutils\command\build.py", line 135, in run
    self.run_command(cmd_name)
  File "c:\python35\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "c:\python35\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "c:\python35\lib\distutils\command\build_ext.py", line 338, in run
    self.build_extensions()
  File "c:\python35\lib\distutils\command\build_ext.py", line 447, in    build_extensions
    self._build_extensions_serial()
  File "c:\python35\lib\distutils\command\build_ext.py", line 472, in _build_extensions_serial
    self.build_extension(ext)
  File "c:\python35\lib\distutils\command\build_ext.py", line 532, in build_extension
    depends=ext.depends)
  File "c:\python35\lib\distutils\_msvccompiler.py", line 315, in compile
    self.initialize()
  File "c:\python35\lib\distutils\_msvccompiler.py", line 208, in initialize
    vc_env = _get_vc_env(plat_spec)
  File "c:\python35\lib\distutils\_msvccompiler.py", line 90, in _get_vc_env
    universal_newlines=True,
  File "c:\python35\lib\subprocess.py", line 629, in check_output
    **kwargs).stdout
  File "c:\python35\lib\subprocess.py", line 698, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
  File "c:\python35\lib\subprocess.py", line 1055, in communicate
    stdout = self.stdout.read()
  File "c:\python35\lib\encodings\cp1250.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x88 in position 162: character maps to <undefined>  

pip install lib2d 出现类似错误,造轮子
pipwheels 是最新的

我做了一些研究,结果表明:
1. 代码页 852 中的byte 0x88 是:ł - LATIN SMALL LETTER L WITH STROKE
2.在用户名和计算机名中使用“非标准字符”是非常不明智的(我年轻,没有经验)
3. 更改完整的计算机名称是个坏主意,因为许可证问题,然后其他正在运行的程序可能会由于混乱的更改而停止运行
4. Python 安装程序尝试解释 代码页 1250 中未定义的字符
5. Python对cp852应该不陌生,但是误以为CMD有cp1250
6. cp1250 中的ł - LATIN SMALL LETTER L WITH STROKEbyte 0xB3
7. 这似乎是我建造失败的唯一原因
8.其他“非标准字符用户”可能会遇到同样的问题,因为bytes: 0x81; 0x83; 0x90; 0x98;cp1250中没有赋值,但在cp852中赋值; cp775; cp 437;和其他

那么,有没有办法解决这个安装/构建障碍以及如何解决?
也许我应该更改和/或向 Pythons 文件 codecs.py 添加一些内容? - 试图猜测

我在 CMD 中尝试过chcp 1250,但它产生了另一个错误,这次是不同的错误(参见下面的示例)。

lib2d 包示例:

C:\Python35\Scripts\lib2d-0.0.2> c:\python35\python.exe setup.py install
running install
running build
running build_py
running build_ext
building '_lib2d' extension
creating build\temp.win-amd64-3.5
creating build\temp.win-amd64-3.5\Release
creating build\temp.win-amd64-3.5\Release\src
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -Iinclude -Ic:\python35\include -Ic:\python35\include "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\winrt" /Tcsrc/anim.c /Fobuild\temp.win-amd64-3.5\Release\src/anim.obj -std=c99
cl : Command line warning D9002 : ignoring unknown option '-std=c99'
anim.c
src/anim.c(1): fatal error C1083: Cannot open include file: 'lib2d.h': No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\amd64\\cl.exe' failed with exit status 2

解决这个其他错误是一条更简单的道路,如果是那么怎么做?

【问题讨论】:

  • 您的代码页通常是什么(chcp 返回什么?)。 chcp 852 有什么作用吗? chcp 65001 呢?如果您在 SO 上没有得到好的答案,请尝试 python-list,在 news.gmane.org 上镜像为新闻组 gmane.comp.python.general。
  • 实际上看起来 chcp 1250 已经用 ł 解决了问题。构建问题完全是另外一回事,可能是 lib2d 特有的。它宣传为兼容 3.5 吗? “未知选项”表明构建文件尚未针对新的 VS 版本进行调整。 VS 14.0 和 VS 2015 一样,都是用来编译 3.5 的吗?
  • @TerryJanReedy 谢谢。您的问题和建议向我展示了几乎在我眼前的东西。我以 lib2d 为例,因为错误日志比我 无法安装的 numpy 更短。我通常有 CP852,所以是的,你写的没错:“chcp 1250 已经解决了问题”。 lib2d is 与 Python 3.5 不兼容,因此与 VS 2015 不兼容,所以我看不到 CP1250 上的 pip3.5 install numpy 工作正常。哈哈

标签: python-3.x encoding cmd installation building


【解决方案1】:

您必须使用“pip3.5”(如果存在或可能只有“pip3”)安装程序而不是“pip”。

“Pip”执行 python2.x 解释器,它不支持 UTF-8 编码,这就是你得到 UnicodeDecodeError 的原因。

【讨论】:

  • 谢谢,您在我的问题下与 Terry Jan Reedy cmets 总结的答案引导我找到了解决方案,并向我展示了我忽略的内容。当包与 python 版本 兼容时,chcp 1250pip3.5 install &lt;package_name&gt; 设置的活动代码页 1250 运行起来像梦一样 :)
猜你喜欢
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 2020-03-09
  • 2021-05-04
  • 1970-01-01
相关资源
最近更新 更多