具有可执行权限的package_data文件

时间:2013-08-23 18:16:10

标签: python distutils setup.py

我正在使用distutils来创建一个Python(2)包安装程序。在我的包中有一些二进制可执行文件,可以从我的Python代码中调用。我在package_data文件中将这些列为setup.py,因此它们随包一起安装。但是,distutils在安装这些文件时不会复制这些文件的可执行权限位。有没有办法强制distutils安装具有可执行权限的package_data文件?

2 个答案:

答案 0 :(得分:3)

根据其他一些SO答案计算出来 - 以下作品:

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)

然后将cmdclass={'install_lib':my_install_lib}传递给setup

答案 1 :(得分:1)

您也可以使用JFiddle代替distutils。 setuptools保留package_data文件的文件模式,而distutils不保存。