Python setup.py调用makefile不包含二进制文件

问题描述

我找到了一个非常简单的解决方案。

正如我所说,我的主要问题是我正在打包已编译的文件。要从tarball / zip文件中排除这些文件,只需将其放在MANIFEST.in:中prune bin

然后只需从setup.py调用makefile:

directory = 'bin'
if not os.path.exists(directory):
    os.makedirs(directory)

subprocess.call(['make', '-C', 'src'])

这样,当有人这样做时pip install whatever,将调用make文件并放上二进制文件bin(必须在make文件上指定它)。

然后,只需说一下复制这些文件的设置即可:

setup(
...
data_files=[('bin', ['bin/binaries'])],
)

做完了!希望有人觉得这很有用:)

解决方法

一些上下文:我有一些C代码,在编译时可以像这样在终端中调用:./my_excec -params它生成一些我在python中用于生成图表的文件,以及其他内容。

我想将所有内容都打包在python库中,包括C代码和python代码。C代码不是python扩展(将来会很好,但现在不会)。

我有一个make文件来编译C代码,我知道可以从setup.py调用它,如下所示: subprocess.call(['make','-C','word2vec-src'])

我想要做的是:pip install my_module应该调用makefile,编译C,以便用户可以调用二进制文件:my_excec -params并且还可以在其周围导入python代码。

我遇到的问题是包装python包时。我data_filessetup()这样使用选项:data_files=[('bin',['bin/binary_file'])],将文件从bin移到安装文件夹(在虚拟环境中),然后可以调用它们。但是,当打包还将压缩文件放到tarball中时,当我打电话给pip
install my_module`时,它会将压缩文件从我的计算机中放出。

谢谢。