从twisted运行django时的ImportError

时间:2015-05-09 19:25:58

标签: python django twisted python-import

我试图运行一个Twisted程序,它提供一些请求,并通过WSGI运行一个Django应用程序,并将一些请求路由到它。文件夹结构是这样的:

code
  |-- __init__.py
  |-- main.py
  |-- django_proj
  |     |-- __init__.py
  |     |-- manage.py
  |     |-- django_proj
  |     |     |-- __init__.py
  |     |     |-- settings.py
  |     |     |-- ...
  |     |-- django_app
  |     |     |-- __init__.py
  |     |     |-- models.py
  |     |     |-- ...

现在,在django_proj/django_proj/settings.py我有这一行:

INSTALLED_APPS = (
    ...
    'django_proj.django_app',
    ...
)

我在code文件夹中运行该程序,如下所示:python ./main.py,它运行没有问题。但是当我需要使用manage.py运行时,就像运行manage.py migrate一样,我需要进入code/django_proj文件夹并运行它;但后来它说:

ImportError: No module named django_app

我需要将INSTALLED_APPS中的行更改为:

INSTALLED_APPS = (
    ...
    'django_app',
    ...
)

但如果我这样离开,我就无法运行python ./main.py!因为它会说:

ImportError: No module named django_app

到目前为止,我曾经改变过这条线路。基于我目前需要做的事情 我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

两种解决方案:将manage.py移至code(推荐)。

或:使用python -m django_proj.manage

无论您选择什么,您都必须将所有相对进口变为绝对进口。也就是说,从django_proj.settingsdjango_proj.django_proj.settings

相对进口是令人讨厌的,并导致你现在遇到的那种问题。 (这就是从Python 3中删除相对导入的原因。)

有关详细信息,请参阅this answer中的Martijn Pieters

我现在看到您的code有一个__init__.py。真的需要吗?如果没有,请将其删除。如果需要,那么即使使用我的解决方案,您仍将使用相对于code的导入。

这意味着您必须将所有脚本移出code,并使用code为所有导入添加前缀。