我正在尝试在一些独立的屏幕抓取脚本中使用 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 了。然而,这看起来像是一个黑客,更重要的是,它不是很可移植(我必须在运行此代码的任何地方创建此符号链接)。
所以,我想知道是否有人有更好的解决方案来解决我的问题?