Python 具有可执行权限的包_数据文件
我正在使用distutils创建Python(2)包安装程序。在我的包中有两个从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
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的实际导入。请记住,新手(像我一样)可能并不总是知道脚本有什么问题。感谢您分享解决方案!