Python需要哪些依赖项才能避免UnicodeDecodeError?

问题描述

| 我正在使用Plone集体的Python构建。它构建了各种版本的Python,包括2.6和2.7。 由于某些原因,当我尝试使用2.7发布时,出现此错误
$ /Users/aclark/Developer/collective/python/python-2.7/bin/mkrelease -T -d local
…
adding \'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/dependency_links.txt\'
adding \'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/entry_points.txt\'
adding \'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/namespace_packages.txt\'
adding \'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/not-zip-safe\'
adding \'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/PKG-INFO\'
adding \'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/requires.txt\'
adding \'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/SOURCES.txt\'
adding \'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/top_level.txt\'
removing \'plonetheme.grungeera-0.1.1\' (and everything under it)
running register
running check
Traceback (most recent call last):
  File \"<string>\",line 22,in <module>
  File \"setup.py\",line 36,in <module>
    \"\"\",File \"/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/core.py\",line 152,in setup
    dist.run_commands()
  File \"/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/dist.py\",line 953,in run_commands
    self.run_command(cmd)
  File \"/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/dist.py\",line 972,in run_command
    cmd_obj.run()
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/distribute-0.6.15-py2.7.egg/setuptools/command/register.py\",line 9,in run
    _register.run(self)
  File \"/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/command/register.py\",line 51,in run
    self.run_command(cmd_name)
  File \"/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/cmd.py\",line 326,in run_command
    self.distribution.run_command(command)
  File \"/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/dist.py\",in run_command
    cmd_obj.run()
  File \"/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/command/check.py\",line 69,in run
    self.check_restructuredtext()
  File \"/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/command/check.py\",line 111,in check_restructuredtext
    for warning in self._check_rst_data(data):
  File \"/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/command/check.py\",line 138,in _check_rst_data
    parser.parse(data,document)
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/__init__.py\",line 157,in parse
    self.statemachine.run(inputlines,document,inliner=self.inliner)
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py\",line 170,in run
    input_source=document[\'source\'])
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/statemachine.py\",line 233,in run
    context,state,transitions)
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/statemachine.py\",line 454,in check_line
    return method(match,context,next_state)
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py\",line 2706,in underline
    self.section(title,source,style,lineno - 1,messages)
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py\",line 329,in section
    self.new_subsection(title,lineno,line 398,in new_subsection
    node=section_node,match_titles=1)
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py\",line 284,in nested_parse
    node=node,match_titles=match_titles)
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py\",line 195,in run
    results = StateMachineWS.run(self,input_lines,input_offset)
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/statemachine.py\",line 2646,in blank
    self.parent += self.literal_block()
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py\",line 2740,in literal_block
    literal_block = nodes.literal_block(data,data)
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/nodes.py\",line 807,in __init__
    TextElement.__init__(self,rawsource,text,*children,**attributes)
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/nodes.py\",line 795,in __init__
    textnode = Text(text)
  File \"/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/nodes.py\",line 331,in __new__
    return reprunicode.__new__(cls,data)
UnicodeDecodeError: \'ascii\' codec can\'t decode byte 0xe2 in position 32: ordinal not in range(128)
register Failed
但是,如果我使用Python 2.6:
$ /Users/aclark/Developer/collective/python/python-2.6/bin/mkrelease -T -d local
没有UnicodeDecodeError。一切正常。 通常,这会使我相信Python的编译环境(Mac OS X)出了点问题,但是在这种情况下,2.6和2.7都是在同一环境中编译的,但有一个可行,而一个没有。 这里可能出什么问题了?我可以寻找/检查些什么来解决这个问题?     

解决方法

        我认为这是不同的:两种python安装中的docutils版本。 在docutils软件包上仍需要不断进行工作,并且该项目会定期将当前的Subversion HEAD作为快照发布。 Python 2.7追溯中的行号似乎与最新的快照匹配(根据下载的标题,该快照于2010年9月1日发布)。 我有理由确定,Python 2.6 site-packages目录与Python 2.7安装目录不同。 跑:
diff -ur python-2.6/lib/python2.6/site-packages/docutils python-2.7/lib/python2.7/site-packages/docutils 
确认这一点。如果我是对的,只需将2.6树中的版本复制到2.7树中,并让Python 2.7在导入时重新编译它们,或使用
compileall.py
脚本:
python-2.7/bin/python python-2.7/lib/python2.7/compileall.py lib/python2.7/site-packages/docutils
    ,        发生这种情况是因为Python从不是ascii的文件中读取了一些数据。 Python上的默认编码为
ascii
,而ascii确实仅支持7位字符(<128)。 您可以通过以下几种方法来更正此错误: 告诉python为此文件使用正确的编码 将文件读取为二进制文件并使用字节而不是字符串(可能性较小) 更改python默认编码以使用utf-8(有点风险) 顺便说一句,我试图在我的系统上运行bin / buildout,但是它失败了(后来),因为它使用了一些编译器不支持的命令行选项。
gcc -c -fno-strict-aliasing -Wno-long-double -no-cpp-precomp -mno-fused-madd -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -I. -I./Include  -DPy_BUILD_CORE -o Modules/python.o     Modules/python.c
cc1: error: unrecognized command line option \"-Wno-long-double\"

i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)