【问题标题】:package_data files with executable permissions具有可执行权限的 package_data 文件
【发布时间】:2013-08-23 18:16:09
【问题描述】:

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

【问题讨论】:

    标签: python distutils setup.py


    【解决方案1】:

    根据其他一些 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

    【讨论】:

    • 我试过这个解决方案,它奏效了。您只是错过了 distutils 的实际导入。请记住,新手(比如我)可能并不总是现在脚本出了什么问题。感谢您分享解决方案!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-07-18
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 2011-12-27
      • 2023-03-19
      • 2019-02-17
      • 2019-06-15
      • 1970-01-01
      相关资源
      最近更新 更多