Django, модули Python и подмодули Git - PullRequest
3 голосов
/ 28 февраля 2011

Я работаю над проектом django, в котором используются несколько приложений (модулей python). Большинство из этих модулей Python поддерживаются другими людьми в своих собственных репозиториях git. Я использую команду git-submodules, чтобы импортировать их в мой проект в каталоге 'apps' следующим образом:

mysite/
mysite/apps
mysite/apps/django-extensions
mysite/apps/django-celery
mysite/apps/django-comments
mysite/apps/myapp
...etc

Большинство этих подмодулей (например, django-extensions) имеют подпапку, содержащую фактический модуль python: mysite / apps / django-extensions / django_extensions

Это означает, что я не могу просто установить свой путь к питону для включения mysite / apps - я должен установить его для включения mysite / apps / django-extensions, чтобы он мог импортировать подпапку django_extensions.

Набирает раздражающий текст:

PYTHONPATH=mysite/apps/django-extensions:mysite/apps/django-celery... python manage.py runserver

Есть ли более простой способ, которым я должен выкладывать репо? Более легкий процесс? Ради интереса я попробовал PYTHONPATH из mysite / apps / *, но это не сработало.

Ответы [ 4 ]

8 голосов
/ 28 февраля 2011

Это неправильный способ сделать это.Не устанавливайте сторонний код сторонних разработчиков в свой файл проекта.Вместо этого создайте virtualenv и установите код напрямую, используя pip.

5 голосов
/ 28 февраля 2011

После того, как в Интернете я ничего не нашел, я вместе взломал это решение. Это просто и работает достаточно хорошо:

#At the top of settings.py
import sys, os
git_sub_modules = '/path/to/dir/containing/submodules' #Relative paths ok too
for dir in os.listdir(git_sub_modules):
    path = os.path.join(git_sub_modules, dir)
    if not path in sys.path:
        sys.path.append(path)

проходит время

ОБНОВЛЕНИЕ: гораздо проще использовать virtualenv и / или что-то вроде dokku для развертывания приложений. Я больше не использую это. Хотя по-прежнему трудно извлекать приложения сторонних производителей, которым нужны «настройки», и использовать их в проекте.

1 голос
/ 28 февраля 2011

Вы можете указать эти пути в файле dependencies.pth, и в вашем пути будет только .pth.В вашем site-packages / dist-packages есть примеры.

0 голосов
/ 28 февраля 2011

Не могли бы вы попробовать проверить только нужную часть хранилища?Поэтому, если у них есть реальный код внутри того, что вы проверяете, не проверяйте дополнительную часть.

Поэтому вместо получения django-extensions получите django-extensions / django-extensions.

Редактировать: Я полагаю, это - это то, что вы могли бы сделать выше.

Кроме того, я полагаю, что вы можете избежать добавления __init__.py в первыйКаталог django-extensions, но тогда вам придется добавить дополнительные django-extensions к вашему импорту (__init__.py сообщает Python, что это пакет).Хотя я думаю, что это может сработать, я бы порекомендовал снимать для первого примера.

...