一些上下文:我有一些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包时。 我在setup()
使用data_files
选项,如下所示: data_files=[('bin', ['bin/binary_file'])],
这会将文件从bin移动到安装文件夹(在虚拟环境中),我可以给他们打电话。 但是当打包时也将编译后的文件放在tarball中,当我调用pip install时,my_module`会从我的计算机中放入已编译的文件。
谢谢。
我找到了一个非常简单的解决方案。
正如我所说,我的主要问题是我正在打包已编译的文件。 要从tarball / zip中排除这些文件,只需将其放在MANIFEST.in:prune 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'])], )
完成! Hopefuly有人觉得这很有用:)
以上就是c/c++开发分享Python setup.py调用makefile不包含二进制文件相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560212.html