Do not compress manual pages and install them in the right place. Fix "TypeError: write() argument must be str, not bytes" with Python 3 by decoding `manpage' properly. Index: setup.py --- setup.py.orig +++ setup.py @@ -20,7 +20,6 @@ import os import operator import subprocess import glob -import gzip import datetime import docutils.core @@ -100,20 +99,19 @@ class build_man(NoOptionCommand): def run(self): self.mkpath('build') - for (sourcefile, gzfile) in [ - ('data/arandr.1.txt', os.path.join('build', 'arandr.1.gz')), - ('data/unxrandr.1.txt', os.path.join('build', 'unxrandr.1.gz')), + for (sourcefile, manfile) in [ + ('data/arandr.1.txt', os.path.join('build', 'arandr.1')), + ('data/unxrandr.1.txt', os.path.join('build', 'unxrandr.1')), ]: - if newer(sourcefile, gzfile): + if newer(sourcefile, manfile): rst_source = open(sourcefile).read() manpage = docutils.core.publish_string(rst_source, writer=docutils.writers.manpage.Writer()) - info('compressing man page to %s', gzfile) + info('writing man page to %s', manfile) if not self.dry_run: - compressed = gzip.open(gzfile, 'w', 9) - compressed.write(manpage) - compressed.close() + with open(manfile, 'w') as fh: + fh.write(manpage.decode('utf-8')) class update_translator_credits(NoOptionCommand): description = 'Examine the git history to produce an updated metadata file.' @@ -218,7 +216,7 @@ class clean(_clean): def run(self): if self.all: dirs = ['build/locale'] - files = ['build/arandr.1.gz', 'build/unxrandr.1.gz'] + files = ['build/arandr.1', 'build/unxrandr.1'] for directory in dirs: if os.path.exists(directory): remove_tree(directory, dry_run=self.dry_run) @@ -259,7 +257,7 @@ setup(name = PACKAGENAME, }, data_files = [ ('share/applications', ['data/arandr.desktop']), # FIXME: use desktop-file-install? - ('share/man/man1', ['build/arandr.1.gz', 'build/unxrandr.1.gz']), + ('man/man1', ['build/arandr.1', 'build/unxrandr.1']), ], scripts = ['arandr', 'unxrandr'], )