![](/img/trans.png)
[英]How to add existing package in Python project in Visual Studio 2017 (for IntelliSense)
[英]How to package an existing C++ project using Python?
我正在尝试制作由同事编写的C ++研究代码,这些代码可供新研究生轻松使用。 我想要做的是一个用清晰的编程接口抽象项目底层结构的包。 这应该足够简单 ,我的同事可以帮助维护它,而不是Python的世界级专家。
我需要你的帮助来设计和整理我的包裹。
现有代码进行物理模拟。 它采用纯文本输入文件,其中包含用于启动模型的值。 然后,在C ++中完成一些数字运算,并将模拟结果写入另一个文本文件。
这种方法的问题在于它缺乏灵活性,特别是在循环参数的不同值时,并且它不是超级用户友好的设置和使用。 使用bash脚本会鼓励不良做法和重复性差。
我们想要的是一个包:
用户最后会有这样的事情:
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()
我还想不通的是:
我真的不明白
我阅读了许多与distutils
, setup.py
文件相关的文档页面,搜索了Hitchhiker的包装指南,但我找不到一个全面的指南来解决我想要做的事情。 特别是,我不明白我的setup.py
应该包含什么,我的包应该如何组织以及如何在调用二进制文件时处理不同的文件路径...
我认为你的方法听起来很合理。 我会解决它:
有很多方法可以做到这一点; 他们都需要一些工作,但最终你会得到一个工作流程。
就个人而言,我发现Cython是一个非常有效的一站式服务,可以完成上述所有工作。 虽然Cython是为高性能python开发的,但单独集成C和C ++模型的流程值得使用恕我直言。
请查看Cython教程,以便快速入门。 完整文档具有更多特定于语言的详细信息,但不需要用于您的目的。
最后,我决定采用我发现的最简单的方法,作为启动项目的第一步。 我可以考虑稍后改变它。
我加了预编译的二进制文件的“bin”文件夹,以及所使用的package_data={'mypkg': ['bin']}
选项在我的setup.py文件来解决路径问题的解释在这里 。 可执行文件foo
必须位于: mypkg/bin/foo
。 这样,我可以在我的包中运行foo
,例如:
subprocess.getoutput(pkg_resources.resource_filename('mypkg', 'bin')+"/foo")
我知道这有点hacky和有限,但使用Python构建/包装C ++代码对我来说仍然是一个令人头疼的问题。 如果您能想到更好的解决方案,请随时发布。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.