структура каталогов для проекта, который смешивает C ++ и Python

Скажем, вы хотите создать программный проект, который смешивает C ++ а также питон. Foo C ++ структура проекта использует CMake, и питон модуль создан с помощью глоток спиртного. Древовидная структура будет выглядеть примерно так:

├── CMakeLists.txt
├── FooConfig.cmake.in
├── FooConfigVersion.cmake.in
├── Makefile
├── README
├── foo
│   ├── CMakeLists.txt
│   ├── config.hpp.in
│   ├── foo.cpp
│   └── foo.hpp
└── swig
└── foo.i

Теперь вы хотели бы использовать Foo проект в рамках питон проект, скажем Бар:

├── 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. Шаблон BoilerplatePP также доступен для создания CMake C ++ проект с использованием cookiecutter (нет глоток спиртного часть).
Итак, теперь у меня есть структура обоих проектов, и, учитывая, что разработка будет происходить в основном в питон и чтобы проект запускался в разных системах, мне нужно ответить на следующие вопросы:

  1. Какой лучший способ их смешать? Должен ли я свернуть оба корневых каталога? Должен ли я иметь Foo C ++ проект в качестве каталога Бар проект или наоборот? Я могу быть склонен поставить весь C ++ структура, показанная выше в папке на корневом уровне питон проект, но я хотел бы знать априори любые подводные камни как CMake Система достаточно мощная, и может быть удобно сделать это наоборот.
  2. В случае, если я решу поставить Foo проект как каталог внутри Бар, это питон Пакет setuptools такой же мощный, как CMake построить систему? Я спрашиваю это, потому что, когда я смотрю на Бар проект, на верхнем уровне кажется, что есть только куча сценариев, но я не знаю, является ли это эквивалентом CMake как я новичок в питон.
  3. Бар Проект, изложенный выше, имеет один бар каталог, но я предполагаю, что всякий раз, когда этот проект расширяется, вместо многих других каталогов на корневом уровне, другие каталоги, содержащие питон код будет размещен в бар. Это правильно (в вещий смысл)?
  4. Я предполагаю, что из всего проекта будет получено одно яйцо, чтобы его можно было установить и запустить во многих различных системах Python. Является ли интеграция модуля, созданного Foo Проект легкий? Я предполагаю, что этот модуль будет создан в другом каталоге, чем бар.
  5. Для того, чтобы питон код в пределах бар каталог, модуль, созданный глоток спиртного должен быть доступен, поэтому я думаю, что самый простой способ сделать это — изменить переменную среды PYTHONPATH с использованием CMake система. Это нормально или есть лучший способ?

10

Решение

Если приложение C ++ не используется вне пакета Python, который будет его содержать:

Вы можете довольно безопасно поместить код C ++ в пакет python, которому он принадлежит. Поместите каталог «foo» в каталог «bar» в вашем примере. Это немного упростит упаковку финального модуля Python.

Если приложение C ++ можно использовать повторно:

Я бы определенно попытался представить вещи в терминах «пакетов», где независимые части являются самодостаточными. Все независимые части живут на одном уровне. Если одна часть зависит от другой, вы импортируете из соответствующей «упаковки» с того же уровня. Вот как обычно работают зависимости.

Я НЕ включил бы одно в другое, потому что одно не принадлежит строго другому. Что если вы начали третий проект, который нуждался в «foo», но не нуждался в «bar»?

Я поместил бы и пакеты «foo», и «bar» в один и тот же каталог «project» (и, вероятно, я бы дал каждому пакету свой собственный репозиторий кода, чтобы каждый пакет можно было легко поддерживать и устанавливать).

6

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector