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