Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python setup.py调用makefile don';不包括二进制文件_Python_C_Setup.py - Fatal编程技术网

Python setup.py调用makefile don';不包括二进制文件

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安装应该调用

一些上下文:我有一些C代码,编译后我可以在终端中这样调用:
/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的。