Estoy tratando de usar el ORM de Django en algunas secuencias de comandos de raspado de pantalla independientes. Sé que esta pregunta ya se hizo antes, pero no puedo encontrar una buena solución para mi problema en particular.Use el ORM de Django en una secuencia de comandos independiente (otra vez)
Tengo un proyecto de Django con modelos definidos. Lo que me gustaría hacer es usar estos modelos y el ORM en mi script de raspado. Mi estructura de directorios es algo como esto:
project
scrape
#scraping scripts
...
test.py
web
django_project
settings.py
...
#Django files
He intentado hacer lo siguiente en 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()
Sin embargo, consigo un ImportError
cuando trato de ejecutar 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
Una solución que encontré alrededor de este problema es crear un enlace simbólico al ../web/govcheck
en la carpeta scrape:
:scrape rmanocha$ ln -s ../web/govcheck ./govcheck
Con esto, puedo ejecutar test.py muy bien. Sin embargo, esto parece un truco y, lo que es más importante, no es muy portátil (tendré que crear este enlace simbólico en todos los lugares donde ejecute este código).
Entonces, me preguntaba si alguien tiene mejores soluciones para mi problema?
Gracias - que funciona. –