Python setup.py调用makefile don';不包括二进制文件
一些上下文:我有一些C代码,编译后我可以在终端中这样调用:Python setup.py调用makefile don';不包括二进制文件,python,c,setup.py,Python,C,Setup.py,一些上下文:我有一些C代码,编译后我可以在终端中这样调用:/my_excec-params它生成一些文件,我在python中使用这些文件生成图表和其他东西 我想把所有东西都打包到python库中,包括C代码和python代码。C代码不是python扩展(很可能将来会出现,但现在不是) 我有一个make文件来编译C代码,我知道我可以从setup.py调用它,如下所示: subprocess.call(['make'、'-C'、'word2vec src']) 我希望能够做到的是:pip安装应该调用
/my_excec-params
它生成一些文件,我在python中使用这些文件生成图表和其他东西
我想把所有东西都打包到python库中,包括C代码和python代码。C代码不是python扩展(很可能将来会出现,但现在不是)
我有一个make文件来编译C代码,我知道我可以从setup.py调用它,如下所示:
subprocess.call(['make'、'-C'、'word2vec src'])
我希望能够做到的是:pip安装应该调用makefile的my_模块
,编译C以便用户可以调用二进制文件:my_excec-params
,还能够导入它周围的python代码
我遇到的问题是在打包python包时。我正在使用setup()
中的data\u files
选项,如下所示:data\u files=[('bin',['bin/binary\u file'])],
这将文件从bin移动到安装文件夹(在虚拟环境中),我可以调用它们。但是,当打包也将编译后的文件放入tarball时,当我调用pip install时,我的_模块将从我的计算机中放入编译后的文件
谢谢。我找到了一个非常简单的解决方案 正如我所说,我的主要问题是我正在打包编译的文件。要从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安装任何要调用make文件并将二进制文件放在bin
(必须在make文件中指定)的操作时
然后只需说出复制这些文件的设置:
setup(
...
data_files=[('bin', ['bin/binaries'])],
)
完成了!希望有人觉得这有用:)这真的很有用。你在什么地方有完整源代码的链接吗?我感兴趣的是您是如何构造Makefile的。