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

标签 python c++ directory swig directory-structure

假设您想创建一个混合使用 C++Python 的编程项目。 Foo C++ 项目结构使用 CMakePython 模块使用 Swig。树结构看起来像这样:

├── 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's pypackage template 创建的. BoilerplatePP 模板也可用于使用 cookiecutter(无 Swig 部分)生成 CMake C++ 项目。 所以现在我已经有了两个项目的结构,并且考虑到开发将主要在 Python 中进行并且项目将在不同的系统中运行,我需要解决以下问题: p>

  1. 混合它们的最佳方式是什么?我应该折叠两个根目录吗?我应该将 Foo C++ 项目作为 Bar 项目的目录还是相反?我可能倾向于将上面显示的整个 C++ 结构放在 Python 项目的根级别的文件夹中,但我想知道先验 任何陷阱,因为 CMake 系统非常强大,反过来可能会很方便。
  2. 如果我决定将 Foo 项目作为目录放在 Bar 中,Python setuptools 包是否与 CMake 构建系统?我问这个是因为当我查看 Bar 项目时,在顶层似乎只有一堆脚本,但我不知道这是否等同于 CMake 因为我是 Python 的新手。
  3. 上面概述的 Bar 项目有一个 bar 目录,但我假设每当这个项目扩展时,其他目录不会在根级别有许多其他目录包含 Python 的代码将被放置在 bar 中。这是否正确(在 Pythonic 意义上)?
  4. 我假设整个项目会生成一个 egg,这样它就可以在许多不同的 python 系统中安装和运行。 Foo 项目创建的模块的集成容易吗?我假设此模块将在与 bar 不同的目录中创建。
  5. 为了 bar 目录中的 Python 代码,Swig 创建的模块必须可用,所以我猜最执行此操作的直接方法是使用 CMake 系统修改环境变量 PYTHONPATH。这样好还是有更好的方法?

最佳答案

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

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

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

我肯定会尝试从“包”的角度来思考事物,其中独立的部分是自包含的。所有独立的部分都在同一层。如果一个部分依赖于另一个部分,则从同一级别从其相应的“包”中导入。这就是依赖项通常的工作方式。

我不会将一个包含在另一个中,因为一个不严格属于另一个。如果您启动了第三个需要“foo”但不需要“bar”的项目怎么办?

我会把“foo”和“bar”包放在同一个“项目”目录中(我可能会给每个包它自己的代码库,这样每个包都可以很容易地维护和安装)。

关于python - 混合 C++ 和 Python 的项目的目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25261550/

相关文章:

python - 使 python __doc__ 属性在 Windows CMD 窗口中正确显示?

Python GTK更新标签

c++ - 使用 libpcl_surface 在 boost::math::lanczos 中调试段错误

c++ - gcc 编译器是否还有一个与继承的构造函数相关的错误?

linux - 无法配置数据记录系统

python - 如何在 Flask 中处理长 SQL 查询?

python - 忽略 Plotly 烛台中的“分钟/小时”数据中的非交易日(假期/删除缺口)

c++ - 为什么 QVector<TYPE*​​>::contains 期望指向非常量 TYPE 的指针作为其参数?

ruby : `read':File.read 中的无效参数 -(Errno::EINVAL)

windows - 关于 Vim 的三个问题