Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有可执行权限的包_数据文件_Python_Distutils_Setup.py - Fatal编程技术网

Python 具有可执行权限的包_数据文件

Python 具有可执行权限的包_数据文件,python,distutils,setup.py,Python,Distutils,Setup.py,我正在使用distutils创建Python(2)包安装程序。在我的包中有两个从Python代码中调用的二进制可执行文件。我在我的setup.py文件中将它们列为package\u data,以便它们与包一起安装。但是,安装这些文件时,distutils不会复制这些文件上的可执行权限位。有没有一种方法可以强制distutils安装具有可执行权限的package\u data文件?根据其他一些SO答案找到了答案-以下工作: class my_install_lib(distutils.comman

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

根据其他一些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)
class my_install_lib(distutils.command.install_lib.install_lib):
def运行(自):
distutils.command.install_lib.install_lib.run(self)
对于self.get_outputs()中的fn:
如果:
#从distutils源复制-使二进制文件可执行
模式=((操作系统统计(fn).st|U模式)| 0555)和07777
distutils.log.info(“将%s的模式更改为%o”,fn,模式)
os.chmod(fn,模式)

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

您也可以使用而不是distutils。setuptools保留了包数据文件的文件模式,而distutils则没有。

我尝试了这个解决方案,效果很好。您刚刚错过了distutils的实际导入。请记住,新手(像我一样)可能并不总是知道脚本有什么问题。感谢您分享解决方案!