假设我有一个在代码中某处调用可执行文件的包(例如第三方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似乎可以解决相同的情况,看起来它有一个合理的答案.