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

一些上下文:我有一些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包时。 我在setup()使用data_files选项,如下所示: data_files=[('bin', ['bin/binary_file'])],这会将文件从bin移动到安装文件夹(在虚拟环境中),我可以给他们打电话。 但是当打包时也将编译后的文件放在tarball中,当我调用pip install时,my_module`会从我的计算机中放入已编译的文件。

谢谢。

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

正如我所说,我的主要问题是我正在打包已编译的文件。 要从tarball / zip中排除这些文件,只需将其放在MANIFEST.in:prune 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'])], ) 

完成! Hopefuly有人觉得这很有用:)