混合C++和Python的项目的目录结构

 博艺 发布于 2022-12-28 17:01

假设你想要创建一个混合C++Python的编程项目.的 C++项目结构使用的CMakePython的模块是通过使用创建的痛饮.树结构看起来像这样:

??? CMakeLists.txt
??? FooConfig.cmake.in
??? FooConfigVersion.cmake.in
??? Makefile
??? README
??? foo
?   ??? CMakeLists.txt
?   ??? config.hpp.in
?   ??? foo.cpp
?   ??? foo.hpp
??? swig
    ??? foo.i

现在你想在Python项目中使用Foo项目,比如Bar:

??? AUTHORS.rst
??? CONTRIBUTING.rst
??? HISTORY.rst
??? LICENSE
??? MANIFEST.in
??? Makefile
??? README.rst
??? docs
?   ??? Makefile
?   ??? authors.rst
?   ??? conf.py
?   ??? contributing.rst
?   ??? history.rst
?   ??? index.rst
?   ??? installation.rst
?   ??? make.bat
?   ??? readme.rst
?   ??? usage.rst
??? bar
?   ??? __init__.py
?   ??? bar.py
??? requirements.txt
??? setup.cfg
??? setup.py
??? tests
?   ??? __init__.py
?   ??? test_bar.py
??? tox.ini

这个结构是通过使用cookiecutter的pypackage模板来创建的.BoilerplatePP模板也可用于使用cookiecutter生成CMake C++项目(无Swig部分).所以现在我有两个项目的结构,并且考虑到开发将主要在Python中进行,项目将在不同的系统中运行,我需要解决以下问题:

    混合它们的最佳方法是什么?我应该折叠两个根目录吗?我应该将Foo C++项目作为Bar项目的目录还是相反?我可以是倾斜的,以使整个C++在的根级别的文件夹中上面所示结构的Python项目,但我想知道先验任何缺陷作为CMake的系统是非常强大的,它可以方便地做到这一点的其他方式.

    如果我决定将Foo项目作为Bar中的目录,那么Python setuptools包是否与CMake构建系统一样强大?我问这个,因为当我看看该酒吧项目,它似乎只起了一堆脚本的顶层,但我不知道这是不是相当于CMake的,因为我是新来的Python.

    上面列出的Bar项目有一个bar目录,但我假设每当这个项目扩展时,而不是在根级别有许多其他目录,其他包含Python代码的目录将放在bar中.这是正确的(在Pythonic意义上)?

    我假设将从整个项目中生成一个鸡蛋,以便可以在许多不同的python系统中安装和运行它.Foo项目创建的模块的集成是否容易?我假设这个模块将在与bar不同的目录中创建.

    为了在bar目录中使用Python代码,Swig创建的模块必须可用,所以我想最直接的方法是使用CMake系统修改环境变量.这样很好还是有更好的方法?PYTHONPATH

kbuilds.. 7

如果C++应用程序在包含它的Python包之外没有用处:

您可以非常安全地将C++代码放在拥有它的python包中.在示例中的"bar"目录中有"foo"目录.这将使包装最终的Python模块更容易一些.

如果C++应用程序是可重用的:

我肯定会尝试用"包"来思考事物,其中独立部分是独立的.所有独立部分都处于同一级别.如果一个部分依赖于另一个部分,则从相应级别的相应"包"导入.这是依赖关系通常的工作方式.

我不会在另一个中包含一个,因为一个不严格属于另一个.如果您开始第三个需要"foo"但不需要"bar"的项目怎么办?

我会将"foo"和"bar"包放在同一个"project"目录中(我可能会给每个包提供自己的代码存储库,这样每个包都可以轻松维护和安装).

1 个回答
  • 如果C++应用程序在包含它的Python包之外没有用处:

    您可以非常安全地将C++代码放在拥有它的python包中.在示例中的"bar"目录中有"foo"目录.这将使包装最终的Python模块更容易一些.

    如果C++应用程序是可重用的:

    我肯定会尝试用"包"来思考事物,其中独立部分是独立的.所有独立部分都处于同一级别.如果一个部分依赖于另一个部分,则从相应级别的相应"包"导入.这是依赖关系通常的工作方式.

    我不会在另一个中包含一个,因为一个不严格属于另一个.如果您开始第三个需要"foo"但不需要"bar"的项目怎么办?

    我会将"foo"和"bar"包放在同一个"project"目录中(我可能会给每个包提供自己的代码存储库,这样每个包都可以轻松维护和安装).

    2022-12-28 17:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有