Ich versuche, die Django ORM in einigen eigenständigen Bildschirm Scraping Skripte zu verwenden. Ich weiß, dass diese Frage schon einmal gestellt wurde, aber ich bin nicht in der Lage, eine gute Lösung für mein spezielles Problem herauszufinden.
Ich habe ein Django-Projekt mit definierten Modellen. Ich möchte diese Modelle und den ORM in meinem Scraping-Skript verwenden. Meine Verzeichnisstruktur ist in etwa so:
project
scrape
#scraping scripts
...
test.py
web
django_project
settings.py
...
#Django files
Ich habe versucht, Folgendes in 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()
Ich erhalte jedoch eine ImportError
wenn ich versuche, test.py auszuführen:
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
Eine Lösung, die ich für dieses Problem gefunden habe, besteht darin, einen symbolischen Link zu ../web/govcheck
im Scrape-Ordner:
:scrape rmanocha$ ln -s ../web/govcheck ./govcheck
Damit kann ich dann test.py problemlos ausführen. Dies scheint jedoch ein Hack zu sein und ist vor allem nicht sehr portabel (ich muss diesen symbolischen Link überall erstellen, wo ich diesen Code ausführe).
Ich frage mich also, ob jemand eine bessere Lösung für mein Problem hat?