使用`setup.py`安装包后运行`chmod`

假设我有一个在代码中某处调用可执行文件的包(例如第三方c /
java程序).让我们进一步假设,应用程序很小/很小,足以捆绑包.例如,单个可执行文件(cfoo).

我可以继续,并将文件放入以下结构:

.
|-- foo
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- core.py
|   |-- corebin
|   |   `-- cfoo
|   `-- foomain.py
`-- setup.py

并准备一个setup.py如下:

from setuptools import setup

setup(
    name='foo',
    version='1.0',
    packages=['foo'],
    scripts=['foo/foomain.py'],
    package_data={'foo': ['corebin/*']},
    zip_safe=False
)

这将允许我正确安装包.后来,在包代码中,我可以这样做:

from subprocess import call

import pkg_resources as res

def main():
    fn = res.resource_filename('foo', 'corebin/cfoo')
    print "Resource located at:", fn
    call([fn])

不幸的是,将安装可执行文件而不设置可执行标志.即使原始文件已设置.在setup.py脚本的末尾添加chmod调用并不容易,因为首先需要找出正确的安装路径.我尝试使用resource_filename但返回了本地文件(如“预安装”中).

怎样才能解决这个问题?同时考虑到virtualenv ……

最佳答案 我正在推荐我的评论答案:

如果使用scripts关键字安装它,它将获得正确的模式(并安装在适当的bin /目录中).

How would you execute something on files contained inside a package after install?

This question似乎可以解决相同的情况,看起来它有一个合理的答案.

点赞