thirose’s blog

openstackやpythonなどなど

Designateのビルドをしてたら、UnicodeEncodeErrorがでてきた

今回はOpenStackのDesignateでおきたエラーですが、他のミドルウェアでも起きる可能性はなくないと思うので、エラーとその対応をまとめます。 今回はpythonの2.7.13が必要だったけど、CentOSpythonが2.7.5だったため、pyenvを入れて対応しようとしていた時にUnicordeEncodeErrorが発生しました。

ERROR LOG

Traceback (most recent call last):
  File "setup.py", line 29, in <module>
    pbr=True)
  File "/home/www/.pyenv/versions/2.7.13/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/home/www/.pyenv/versions/2.7.13/lib/python2.7/distutils/dist.py", line 954, in run_commands
    self.run_command(cmd)
  File "/home/www/.pyenv/versions/2.7.13/lib/python2.7/distutils/dist.py", line 973, in run_command
    cmd_obj.run()
  File "/home/www/.pyenv/versions/2.7.13/lib/python2.7/site-packages/pbr/packaging.py", line 618, in run
    sdist.sdist.run(self)
  File "/home/www/.pyenv/versions/2.7.13/lib/python2.7/site-packages/setuptools/command/sdist.py", line 51, in run
    self.run_command(cmd_name)
  File "/home/www/.pyenv/versions/2.7.13/lib/python2.7/distutils/cmd.py", line 327, in run_command
    self.distribution.run_command(command)
  File "/home/www/.pyenv/versions/2.7.13/lib/python2.7/distutils/dist.py", line 973, in run_command
    cmd_obj.run()
  File "/home/www/.pyenv/versions/2.7.13/lib/python2.7/site-packages/reno/setup_command.py", line 138, in run
    f.write(text)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 4383: ordinal not in range(128)

原因

pyenvの中でデフォルトがasciiコードだっため、おきたエラーだったようです。 確認するためには、以下のようにコンソールで確認できるかと思います。

$ python
>>> import sys
>>> sys.getdefaultencoding()
'ascii'

対応

~/.pyenv/versions/2.7.13/lib/python2.7/site-packages/sitecustomize.pyというファイルを作り、 以下のスクリプトを設置する

import sys
sys.setdefaultencoding('utf-8')

ウェブで検索してると、sitecustomize.pyという名前が一般的っぽい。