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

标签 python c setup.py

一些上下文:我有一些 C 代码,编译后我可以像这样在终端中调用:./my_excec -params 它生成一些文件,我在 python 中使用这些文件来生成图表,并且其他东西。

我想将 C 代码和 Python 代码都打包到 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 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'])],
)

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

关于Python setup.py 调用 makefile 不包含二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436061/

相关文章:

c - 一些比 feof() 更好的循环退出器

c - 如何在C中获取变量字符/字符串的输入?

python-sphinx - Sphinx 无法导入模块依赖项

python - 在一行中构建一个具有属性的类

python LDA scikit learn 抛出 ValueError

python - 导入错误 : cannot import name (not a circular dependency)

python - setup.py 版本依赖错误,但使用 pip install 安装成功

python - python二叉搜索树基本实现中的删除操作

c - 如何在 C 中使用 rand() 函数和范围

python - 默认情况下,setuptools 是否总是安装在 Python 中?