package_data files with executable permissions
distutils, python, setup.py
Solution
Figured it out based on some other SO answers - the following works:
class my_install_lib(distutils.command.install_lib.install_lib):
def run(self):
distutils.command.install_lib.install_lib.run(self)
for fn in self.get_outputs():
if <this is one of the binaries I want to be executable>:
# copied from distutils source - make the binaries executable
mode = ((os.stat(fn).st_mode) | 0555) & 07777
distutils.log.info("changing mode of %s to %o", fn, mode)
os.chmod(fn, mode)
and then pass `cmdclass={'install_lib':my_install_lib}` to `setup`.
Problem
I am using distutils to create a Python (2) package installer. In my package are a couple of binary executable that get called from my Python code. I am listing these as `package_data` in my `setup.py` file so they get installed along with the package. However, distutils does not copy the executable permission bit on these files when they are installed. Is there a way to force distutils to install `package_data` files with executable permissions?