Python 从twisted运行django时的恐惧
我正在尝试运行Twisted程序,它提供一些请求,还通过WSGI运行Django应用程序,并将一些请求路由到它。文件夹结构如下所示:Python 从twisted运行django时的恐惧,python,django,twisted,python-import,Python,Django,Twisted,Python Import,我正在尝试运行Twisted程序,它提供一些请求,还通过WSGI运行Django应用程序,并将一些请求路由到它。文件夹结构如下所示: code |-- __init__.py |-- main.py |-- django_proj | |-- __init__.py | |-- manage.py | |-- django_proj | | |-- __init__.py | | |-- settings.p
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
所以到目前为止,我总是根据我现在需要做的事情来前后更改这行内容。我应该如何解决这个问题?两种解决方案:将
manage.py
移动到code
(推荐)
或者:使用python-mdjango\u proj.manage
无论您选择什么,都必须将所有相对导入更改为绝对导入。也就是说,从django\u项目设置
到django\u项目设置
相对进口是令人讨厌的,并导致你现在正在经历的那种问题。(这就是从Python 3中删除相对导入的原因。)
有关详细信息,请参阅
我现在看到您的
代码
有一个\uuuu init\uuuu.py
。真的需要吗?如果没有,请将其拆下。如果需要,那么即使使用我的解决方案,您仍将使用相对于code
的导入
这意味着您必须将所有脚本移出
code
,并在第二种方式上用code
作为所有导入的前缀:它给了我ImportError:没有名为settings的模块。第二种方式也是如此。谢谢@Andrea!在manage.py
内部更改设置导入,并通过python-m
运行即可!我个人认为第二种方法更好,因为它不会破坏django应用程序的结构,也不会污染带有django应用程序实用程序的code
文件夹。你能详细解释一下为什么推荐第一种方法吗?@sazary:因为python-mdjango_proj.manage
并不“明显”,人们可能会尝试运行python manage.py
。