某些上下文:我有一些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_files
中的setup()
选项,如下所示:data_files=[('bin', ['bin/binary_file'])],
这会将文件从bin移动到安装文件夹(在虚拟环境中),我可以调用它们。但是当打包时也将编译好的文件放在tarball中,当我调用pip install时,my_module`将把编译过的文件放在我的计算机上。
感谢。
答案 0 :(得分:4)
我能够找到一个非常简单的解决方案。
正如我所说,我的主要问题是我正在打包已编译的文件。要从tarball / zip中排除这些文件,只需将其放在MANIFEST.in上:prune bin
。
然后只需要从setup.py:
调用makefiledirectory = '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'])],
)
完成!希望有人发现这个有用:)