来自 twisted 的 运行 django 中的 ImportError
ImportError in running django from twisted
我正在尝试 运行 一个 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
时,比如 运行ning 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
所以到目前为止,我常常根据我当时需要做的事情来回更改这条线。
我应该怎么做才能解决这个问题?
两种解决方案:要么将 manage.py
移动到 code
(推荐)。
或者:使用python -m django_proj.manage
.
无论您选择什么,都必须将所有相对导入更改为绝对导入。即从django_proj.settings
到django_proj.django_proj.settings
.
相对导入很讨厌,会导致您现在遇到的那种问题。 (这就是从 Python 3 中删除相对导入的原因。)
有关详细信息,请参阅 this answer from Martijn Pieters。
我现在看到你的 code
有一个 __init__.py
。真的需要吗?如果没有,请将其删除。如果需要,即使使用我的解决方案,您仍然会使用相对于 code
的导入。
这意味着您必须将所有脚本移出 code
,并为所有导入添加前缀 code
。
我正在尝试 运行 一个 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
时,比如 运行ning 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
所以到目前为止,我常常根据我当时需要做的事情来回更改这条线。
我应该怎么做才能解决这个问题?
两种解决方案:要么将 manage.py
移动到 code
(推荐)。
或者:使用python -m django_proj.manage
.
无论您选择什么,都必须将所有相对导入更改为绝对导入。即从django_proj.settings
到django_proj.django_proj.settings
.
相对导入很讨厌,会导致您现在遇到的那种问题。 (这就是从 Python 3 中删除相对导入的原因。)
有关详细信息,请参阅 this answer from Martijn Pieters。
我现在看到你的 code
有一个 __init__.py
。真的需要吗?如果没有,请将其删除。如果需要,即使使用我的解决方案,您仍然会使用相对于 code
的导入。
这意味着您必须将所有脚本移出 code
,并为所有导入添加前缀 code
。