【发布时间】:2014-10-05 08:38:33
【问题描述】:
假设您想创建一个混合了 C++ 和 Python 的编程项目。 Foo C++项目结构使用CMake,使用Swig创建一个Python模块时间>。树形结构看起来像这样:
├── 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 生成 CMake C++ 项目(没有 Swig 部分)。 所以现在我有了两个项目的结构,并且考虑到开发将主要在 Python 中进行,并且项目将在不同的系统中运行,我需要解决以下问题:
- 混合它们的最佳方法是什么?我应该折叠两个根目录吗?我应该将 Foo C++ 项目作为 Bar 项目的目录还是相反?我可能倾向于将上面显示的整个 C++ 结构放在 Python 项目根级别的文件夹中,但我想知道 先验 由于 CMake 系统非常强大,因此可能会遇到任何陷阱,反过来可能会很方便。
- 如果我决定将 Foo 项目作为目录放在 Bar 中,Python setuptools 包是否与 CMake 构建系统?我问这个是因为当我查看 Bar 项目时,在顶层似乎只有一堆脚本,但我不知道这是否等同于 CMake 因为我是 Python 的新手。
- 上面概述的 Bar 项目只有一个 bar 目录,但我假设每当这个项目扩展时,除了在根级别有许多其他目录,其他目录包含 Python 的代码将被放置在 bar 中。这是正确的吗(在Pythonic 意义上)?
- 我假设整个项目会产生一个鸡蛋,这样它就可以在许多不同的python系统中安装和运行。 Foo 项目创建的模块的集成是否容易?我假设这个模块将在与 bar 不同的目录中创建。
- 为了bar目录中的Python代码,Swig创建的模块必须可用,所以我猜最多直接的方法是使用 CMake 系统修改环境变量
PYTHONPATH。这很好还是有更好的方法?
【问题讨论】:
标签: python c++ directory swig directory-structure