directory structure for a project that mixes C++ and Python
假设你想要创建一个混合C ++和Python的编程项目。 Foo C ++项目结构使用CMake,使用Swig创建Python模块。树结构看起来像这样:
1 2 3 4 5 6 7 8 9 10 11 12 | ├── 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | ├── 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中进行,项目将在不同的系统中运行,我需要解决以下问题:
如果C ++应用程序在包含它的Python包之外没有用处:
您可以非常安全地将C ++代码放在拥有它的python包中。在示例中的"bar"目录中有"foo"目录。这将使包装最终的Python模块更容易一些。
如果C ++应用程序是可重用的:
我肯定会尝试用"包"来思考事物,其中独立部分是独立的。所有独立部分都处于同一级别。如果一个部分依赖于另一个部分,则从相应级别的相应"包"导入。这是依赖关系通常的工作方式。
我不会在另一个中包含一个,因为一个不严格属于另一个。如果您开始第三个需要"foo"但不需要"bar"的项目怎么办?
我会将"foo"和"bar"包放在同一个"project"目录中(我可能会给每个包提供它自己的代码存储库,这样每个包都可以轻松维护和安装)。