2013-08-26 25 views
4

一些背景:我有一些C代码编译的时候,我可以在这样的终端呼叫:./my_excec -params它生成我使用python中生成图表的某些文件,其他的东西。的Python setup.py调用生成文件不包括二进制文件

我想在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时,my_module`会从我的电脑中放入编译好的文件。

谢谢。

回答

3

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

正如我所说我的主要问题是,我打包了编译的文件。要排除这些文件形成压缩包/ ZIP只是不得不把这个MANIFEST.in:prune bin

然后就需要从setup.py调用生成文件:

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

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

有了,当有人不pip install whatever会调用make文件,并把二进制文件上bin(必须在化妆指定此文件)。

然后只需要说的安装程序重新拷贝这些文件:

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

完成!希望有人找到这个有用的:)

+0

这真的很有帮助。你有链接到你的完整源代码的地方吗?我对你如何构建你的Makefile感兴趣。 –