Designateのビルドをしてたら、UnicodeEncodeErrorがでてきた
今回はOpenStackのDesignateでおきたエラーですが、他のミドルウェアでも起きる可能性はなくないと思うので、エラーとその対応をまとめます。 今回はpythonの2.7.13が必要だったけど、CentOSのpythonが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という名前が一般的っぽい。