Используйте Django ORM в автономном сценарии (снова)

Я пытаюсь использовать Django ORM в некоторых автономных сценариях анализа экранных данных. Я знаю, что этот вопрос задали прежде, но я не могу выяснить хорошее решение для своей конкретной проблемы.

У меня есть проект Django с определенными моделями. То, что я хотел бы сделать, использовать эти модели и ORM в моем сценарии очистки. Моя структура каталогов - что-то вроде этого:

project
    scrape
        #scraping scripts
        ...
        test.py
    web
        django_project
            settings.py
            ...
            #Django files

Я пытался выполнить в следующем project/scrape/test.py:

print os.path.join(os.path.abspath('..'), 'web', 'django_project')
sys.path.append(os.path.join(os.path.abspath('..'), 'web', 'django_project'))
print sys.path
print "-------"
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_project.settings'
#print os.environ
from django_project.myapp.models import MyModel
print MyModel.objects.count()

Однако я добираюсь ImportError когда я пытаюсь выполнить test.py:

Traceback (most recent call last):
  File "test.py", line 12, in <module>
    from django_project.myapp.models import MyModel
ImportError: No module named django_project.myapp.models

Одно решение, которое я нашел вокруг этой проблемы, состоит в том, чтобы создать символьную ссылку на ../web/govcheck в папке царапанья:

:scrape rmanocha$ ln -s ../web/govcheck ./govcheck

С этим я могу затем выполнить test.py очень хорошо. Однако это походит на взлом, и что еще более важно, не очень портативно (я должен буду создать эту символьную ссылку везде, я выполняю этот код).

Так, я задавался вопросом, есть ли у кого-либо какие-либо лучшие решения для моей проблемы?

7
задан Rishabh Manocha 15 March 2010 в 03:12
поделиться

1 ответ

Вы уверены, что этого не должно быть:

sys.path.append(os.path.join(os.path.abspath('..'), 'web'))

Кроме того, убедитесь, что есть __ init __. py файл (пустой) в project / web / django_project .

P.S. Я бы рекомендовал передать вывод os.path.join в os.path.abspath , а не наоборот.

2
ответ дан 7 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: