好的,我有以下目录结构(这是一个django项目):
-> project --> app
在app文件夹中,有一个scraper.py文件需要引用models.py中定义的类
我正在尝试执行以下操作:
import urllib2
import os
import sys
import time
import datetime
import re
import BeautifulSoup
sys.path.append('/home/userspace/Development/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'
from project.app.models import ClassName
并且此代码无效。我收到错误:
Traceback (most recent call last): File "scraper.py", line 14, in from project.app.models import ClassName ImportError: No module named project.app.models
上面的代码曾经起作用,但在某个地方出现了问题,我对于为什么遇到问题感到非常困惑。在SnowLeopard上使用python2.5。
答案 0 :(得分:3)
import sys
sys.path.append ('/path/to/the/project')
from django.core.management import setup_environ
import settings
setup_environ(settings)
from app.models import MyModel
答案 1 :(得分:1)
您可以在这里做的最糟糕的事情是将您的绝对路径硬编码到您的应用或设置中。你不应该这样做,因为它会在部署期间中断,除非你做了一些import local_settings
黑客攻击。
如果您必须访问项目根目录,请尝试使用pinax在settings.py中的内容...
import os.path
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
问题是,您似乎正在尝试访问同一个应用程序中的模型模块,这很容易。
要在同一目录中的scraper.py中导入models.py,只需使用import models
或import models as app_models
,如果你已经在scraper.py(例如django.db.models)中有一些名为models的模型。您熟悉Python模块约定吗?
然而,最好的方法可能是坚持使用django成语,来自...... import ...声明:
from app import models
如果这不能自动生效,那么settings.py中就会出现问题。
答案 2 :(得分:0)
您未指明project
中是否有/home/userspace/Development/
。我会假设它是。
确保__init__.py
中有一个名为project
的文件(默认为空),app
中有另一个文件。
编辑:接下来要尝试:在脚本目录中启动Python命令行并尝试以下操作:
import project
import project.app as app
import project.app.models as models
models.__dict__.keys()
他们都工作吗?如果是这样,最后一行的输出是什么?如果没有,哪个先死?