【发布时间】:2019-09-23 07:47:07
【问题描述】:
我正在尝试使同事编写的 C++ 研究代码易于新研究生使用。 我想做的是一个用干净的编程接口抽象出项目的底层结构的包。这对于我的同事来说应该简单来帮助维护它,而无需成为世界级的 Python 专家。
我需要您的帮助来设计和组织我的包裹。
现有代码
现有代码进行物理模拟。它需要一个纯文本输入文件,其中包含用于启动模型的值。然后,在 C++ 中进行一些数字运算,并将模拟结果写入另一个文本文件。
这种方法的问题在于它缺乏灵活性,尤其是在循环使用不同的参数值时,而且它的设置和使用不是超级用户友好的。使用 bash 脚本会鼓励不良做法和较差的可重复性。
目标
我们想要的是一个包:
- 附带 C++ 模型,并且能够从 Python 运行它。
- 能够进行模板填充以创建输入文件并解析输出文件。 [为此我不需要帮助]
- (可选)构建 C++ 以允许扩展模型。否则只包含预编译的二进制文件。
用户最后会有这样的东西:
import mymodel
# The variables I'll use
myparams = {temperature : 100, foo : 1, bar : "hello", ...}
# create a Python object for example
mysim = mymodel.simulation(myparams)
# run the C++ model
result = mysim.run()
问题
我仍然无法弄清楚的是:
- 就我而言,这是一个合理的策略吗,或者我应该考虑另一种策略,例如。 Python/C++ 直接接口?似乎很难,我只需要调用 C++ 代码的 main 函数来运行模型。
- 在安装包时如何构建C++代码,支持Linux/MacOS/Windows(C++项目没有第三方依赖),然后我该如何管理运行二进制文件 ?或者,我如何分发主要操作系统系列的预编译版本。
我真的不明白
我阅读了许多与 distutils、setup.py 文件相关的文档页面,搜索了 The Hitchhiker's Guide to Packaging,但我找不到关于我正在尝试做什么的全面指南。特别是,我不明白我的setup.py 应该包含什么,我的包应该如何组织以及在调用二进制文件时我应该如何处理不同的文件路径......
【问题讨论】: