2010-03-15 12 views
6

मैं कुछ स्टैंडअलोन स्क्रीन scraping लिपियों में Django ORM उपयोग करने के लिए कोशिश कर रहा हूँ एक स्टैंडअलोन लिपि में Django ORM का प्रयोग करें। मुझे पता है कि इस सवाल से पहले पूछा गया है, लेकिन मैं अपनी विशेष समस्या के लिए एक अच्छा समाधान समझने में असमर्थ हूं।(फिर)

मैं परिभाषित मॉडल के साथ एक Django परियोजना है। मैं जो करना चाहता हूं वह इन स्क्रैपिंग स्क्रिप्ट में इन मॉडलों और ओआरएम का उपयोग करना है।

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 चला सकते हैं। हालांकि, यह एक हैक की तरह लगता है, और सबसे महत्वपूर्ण बात यह है कि, बहुत पोर्टेबल नहीं है (मुझे यह कोड चलाने के लिए हर जगह यह प्रतीकात्मक लिंक बनाना होगा)।

तो, मैं अगर कोई मेरी समस्या के लिए किसी भी बेहतर समाधान है सोच रहा था?

उत्तर

2

आप यकीन है कि यह नहीं होना चाहिए रहे हैं:

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

इसके अलावा, वहाँ project/web/django_project में है एक __init__.py फ़ाइल (खाली ठीक है) सुनिश्चित करें।

पीएस मैं os.path.join के आउटपुट को अन्य तरीकों के बजाय os.path.abspath पर फ़ीड करने की अनुशंसा करता हूं।

+0

धन्यवाद - कि काम करता है। –

7

सांत्वना स्क्रिप्ट के लिए मौजूदा Django एप्लिकेशन की सेटिंग पुन: उपयोग करने का एक आसान तरीका मिल गया:

from django.core.management import setup_environ 

import settings 
setup_environ(settings) 

from myapp.models import Object 

for o in Object.objects.all(): 
    print o 
+1

ध्यान दें कि setup_environ फ़ंक्शन को Django 1.4 के रूप में बहिष्कृत कर दिया गया है। Https://docs.djangoproject.com/en/dev/releases/1.4/#django-core-management-setup-environ –

+0

पर रिलीज़ नोट्स देखें इसके अलावा, 'सेटिंग आयात न करें'। Django.conf आयात सेटिंग्स से करें '। यह पाइथन पथ पर होने पर भी सेटिंग फ़ाइल का पता लगाएगा। –

0

मैं जानता हूँ कि इस सवाल का छह साल पुराना है, लेकिन इस विकल्प इस विषय खोज करने वाले व्यक्ति के लिए अपील कर सकते हैं। मान लिया जाये कि Django के manage.pyproject/ में है, और main() संभालने स्क्रिप्ट के entrypoint है, तो Django तनाव डालें:

./manage.py shell -c 'from scrape.test import main; main()' 
संबंधित मुद्दे