Я пытаюсь использовать 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 очень хорошо. Однако это походит на взлом, и что еще более важно, не очень портативно (я должен буду создать эту символьную ссылку везде, я выполняю этот код).
Так, я задавался вопросом, есть ли у кого-либо какие-либо лучшие решения для моей проблемы?
Вы уверены, что этого не должно быть:
sys.path.append(os.path.join(os.path.abspath('..'), 'web'))
Кроме того, убедитесь, что есть __ init __. py
файл (пустой) в project / web / django_project
.
P.S. Я бы рекомендовал передать вывод os.path.join
в os.path.abspath
, а не наоборот.