Я пытаюсь сделать исследовательский код C ++, написанный коллегами, удобным для использования новыми аспирантами.
То, что я хотел бы сделать, - это пакет, который абстрагирует основную структуру проекта с чистым интерфейсом программирования . Этого должно быть просто , чтобы мои коллеги могли поддерживать его, не будучи экспертами мирового уровня Python.
Мне нужна ваша помощь для разработки и организации моей посылки.
Существующий код
Существующий код выполняет физическое моделирование. Требуется простой текстовый входной файл, содержащий значения для инициации модели. Затем в C ++ выполняется некоторое сокращение чисел, и оно записывает результаты моделирования в другой текстовый файл.
Проблема с этим подходом заключается в том, что ему не хватает гибкости, особенно при зацикливании на различных значениях параметров, и он не очень удобен в настройке и использовании. Использование сценариев bash поощряет плохие практики и плохую воспроизводимость.
Цель
Нам нужен пакет, который:
- поставляется с моделью C ++ и может запускать ее из Python.
- может заполнять шаблон для создания входного файла и для анализа выходного файла. [для этого мне не нужна помощь]
- (необязательно), сборка C ++, позволяющая расширить модель. В противном случае просто включите предварительно скомпилированные двоичные файлы.
У пользователя будет что-то вроде этого в конце:
import mymodel
# The variables I'll use
myparams = {temperature : 100, foo : 1, bar : "hello", ...}
# create a Python object for example
mysim = mymodel.simulation(myparams)
# run the C++ model
result = mysim.run()
Вопросы
То, что я до сих пор не могу понять, это:
- В моем случае, - это разумная стратегия для этого , или я должен рассмотреть другую, например. Прямой интерфейс Python / C ++? Кажется трудным, и мне нужно только вызвать основную функцию кода C ++, чтобы запустить модель.
- Как собрать код C ++ при установке пакета, с поддержкой Linux / MacOS / Windows (проект C ++ не имеет сторонних зависимостей), и как мне тогда запустить двоичный файл ? Или как распространять предварительно скомпилированные версии для основных семейств ОС.
Что я действительно не понимаю
Я прочитал несколько страниц документации, относящихся к файлам distutils
, setup.py
, искал Руководство по упаковке автостопом, но не смог найти исчерпывающее руководство по тому, что я пытаюсь сделать. Особенно я не понимаю, что должен содержать мой setup.py
, как должен быть организован мой пакет и как я должен обрабатывать пути к различным файлам при вызове двоичного файла ...