“ImportError:没有名为jobs.models的模块”,带有相对路径

时间:2012-06-20 07:00:55

标签: python django django-1.4

django 1.4,python 2.6.6。
我有一个应用程序“工作”。
我的文件树:

djproject/
|-- djproject
|   |-- db
|   |   `-- tdata.db
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- jobs
|   |   |-- admin.py
|   |   |-- admin.pyc
|   |   |-- __init__.py
|   |   |-- __init__.pyc
|   |   |-- models.py
|   |   |-- models.pyc
|   |   |-- tests.py
|   |   `-- views.py
|   |-- settings.py
|   |-- settings.pyc
|   |-- urls.py
|   |-- urls.pyc
|   |-- wsgi.py
|   `-- wsgi.pyc
`-- manage.py

我的manage.py文件:

#!/usr/bin/env python

import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djproject.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

然后我运行“python manage.py shell”,其中包含文件“manage.py”的同级文件夹。
然后我输入“from jobs.models import Job” 错误如下(相对路径):

>>> from jobs.models import Job
Traceback (most recent call last):
  File "<console>", line 1, in <module>
ImportError: No module named jobs.models

但是,如果我使用完整路径

>>> from djproject.jobs.models import Job

错误消失,为什么?

3 个答案:

答案 0 :(得分:6)

这是预期的,因为您现在从与以前版本的Django不同的目录运行manage.py。有关详细信息,请参阅Django文档中的Updated default project layout and manage.py

您现在从树中的更高目录开始manage.py,因此在导入代码时您需要包含djproject。该文档还提供了有关如何以不同方式(如果需要)执行此操作的建议:

  

任何作为顶级模块导入的东西都可以放在旁边   新的manage.py。例如,将“myapp”与项目分离   模块并将其导入为myapp,将其放在mysite /   目录:

manage.py
myapp/
    __init__.py
    models.py
mysite/
    __init__.py
    settings.py
    urls.py

答案 1 :(得分:0)

manage.py 向下移动1级(在djproject / djproject /中)应该会有所帮助。然后您就可以根据需要导入模块:

from jobs.models import Job

答案 2 :(得分:-1)

import sys
sys.path.append('/home/python/djproject/djproject')

将其添加到setting.py后,它可以工作。(正如内部服务器错误所说。) 并且我将“myv(jobs)”命令发送到manage.py的相同文件夹,它也可以。(正如Simeon Visser所说。)