[[!meta title="Unicode `long_description` in `setup.py`"]] I've been trying to figure out how to setup Unicode long descriptions in `setup.py`. I often use Unicode in my `README` files and then use the contents of the `README` to set the long description with something like: … _this_dir = os.path.dirname(__file__) … setup( … long_description=codecs.open( os.path.join(_this_dir, 'README'), 'r', encoding='utf-8').read(), ) This crashed in Python 2.7 with a `UnicodeDecodeError` when I tried to register the package on PyPI. The problem is that packages are checked before registration to avoid being registered with broken metadata, and Unicode handling was broken in distutils ([bug 13114][bug13114]). Unfortunately, there haven't yet been Python releases containing the fixes (applied in October 2011). How do you work around this issue until get a more recent Python 2.7? Just use Python 3.x, where Unicode handling is much cleaner. You may need hide Python-3-incompatible code inside: if _sys.version_info < (3,0): blocks, but you shouldn't be pulling in huge amounts of code for `setup.py` anyway. [bug13114]: http://bugs.python.org/issue13114 [[!tag tags/python]]