Проблема такая. Решил форкнуть django-приложение на github`е. Собственно, мне его нужно дописать и вклочить в свой проект. И тут вдруг я понял, что совешенно не представляю как строится процесс разработки python-пакетов.
Есть:
— Мой проект на django в git
— Форк приложения (которое, вне контекста проекта не работает), живет в своём репозитории
Проблема:
— Правильно их подружить, чтобы иметь возможно модифицировать и push'ить приложение в свой репозиторий.
Просто скопировать приложение и положить в папку с проектом, а дальше вливать в общий репозиторий проекта совсем некошерно. Хочется, чтобы приложение жило в отдельном репозитории и подключалось как зависимость через pip.
Попробовал сделать через git addmodule, но тогда приложение не подключается через INSTALLED_APPS.
Может быть, подшаманить с PYTHONPATH, и добавить туда путь с рабочей копией приложения?
Или рабочую копию создать прямо в site-packages?
Чувствую, что не понимаю чего-то фундаментального и очевидного. Как правильно включить стороннее приложение в проект, чтобы его можно было разрабатывать и селить в собственном репозитории, как это вообще принято?
На самом деле, под капотом эта штука делает примерно то же самое, что Вы и предположили, а именно — создаёт в site-packages ссылку .pth на директорию c исходниками.
Да, я уже обратил внимание и почитал вывод в консоли. Меня не покидало ощущение, что это должно делаться как-то по-человечески, общепринято и одной коммандой, а не вероломным хаком python_path.
1. Если приложение не работает вне проекта, то нет совершенно никакого смысла выносить его в отдельный репозиторий.
2. Если оно все таки работает, то устанавливаться в проект оно должно точно также как и все похожие приложения. Подозреваю что для питона это pip.
Ну как пакеты через pip поставить — это и так понятно.
1. Оно не работает вне какого-либо django-проекта, а не моего конкректно. Это батарейка для джанги, модуль.
2. Да, pip, все верно. Но как мне модифицировать код приложения и отправлять это в репозиторий?
У меня проблема не в том, чтобы его поставить, а в том чтобы его дорабатывать независимо от проекта, а в проекте использовать как внешнюю зависимость.
Такие модули я разрабатывал через тестирование.
Проект разрабатывается отдельно, пишутся тесты в симулированном окружении.
А в проекте он только используется, не модифицируется.
Интересный подход, спасибо. Но, боюсь, я сейчас замаюсь покрывать тестами сторонний, уже такой, не сильно маленький, код. Так что нужно искать какое-то другое решение.
Собственно, пока склоняюсь к варианту: положить в соседнюю директорию, работать как с отдельным проектом, и добавить путь до него в PYTHON_PATH, а затем уже нормально импортировать в проект.