aar*_*gon 10 c++ python directory swig directory-structure
假设你想要创建一个混合C++和Python的编程项目.的富 C++项目结构使用的CMake和Python的模块是通过使用创建的痛饮.树结构看起来像这样:
??? CMakeLists.txt
??? FooConfig.cmake.in
??? FooConfigVersion.cmake.in
??? Makefile
??? README
??? foo
? ??? CMakeLists.txt
? ??? config.hpp.in
? ??? foo.cpp
? ??? foo.hpp
??? swig
??? foo.i
Run Code Online (Sandbox Code Playgroud)
现在你想在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
Run Code Online (Sandbox Code Playgroud)
这个结构是通过使用cookiecutter的pypackage模板来创建的.BoilerplatePP模板也可用于使用cookiecutter生成CMake C++项目(无Swig部分).所以现在我有两个项目的结构,并且考虑到开发将主要在Python中进行,项目将在不同的系统中运行,我需要解决以下问题:
PYTHONPATH如果C++应用程序在包含它的Python包之外没有用处:
您可以非常安全地将C++代码放在拥有它的python包中.在示例中的"bar"目录中有"foo"目录.这将使包装最终的Python模块更容易一些.
如果C++应用程序是可重用的:
我肯定会尝试用"包"来思考事物,其中独立部分是独立的.所有独立部分都处于同一级别.如果一个部分依赖于另一个部分,则从相应级别的相应"包"导入.这是依赖关系通常的工作方式.
我不会在另一个中包含一个,因为一个不严格属于另一个.如果您开始第三个需要"foo"但不需要"bar"的项目怎么办?
我会将"foo"和"bar"包放在同一个"project"目录中(我可能会给每个包提供自己的代码存储库,这样每个包都可以轻松维护和安装).