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

时间:2011-11-07 13:37:38

标签: python virtualenv distutils distribute setup.py

假设我有一个在代码中某处调用可执行文件的包(例如第三方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])

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

如何解决这个问题?同时考虑virtualenv ......

1 个答案:

答案 0 :(得分:2)

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

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

  

安装后如何对包中包含的文件执行某些操作?

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