Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用通道2运行服务器时无法导入ASGI_应用程序模块_Python_Django_Django Channels - Fatal编程技术网

Python 使用通道2运行服务器时无法导入ASGI_应用程序模块

Python 使用通道2运行服务器时无法导入ASGI_应用程序模块,python,django,django-channels,Python,Django,Django Channels,我遵循了通道教程,但在运行这些错误时抛出 软件包的版本为 频道==2.1.2 Django==2.0.4 我错过了什么? 在settings.py中 INSTALLED_APPS = [ "channels" .... ] ROOT_URLCONF = 'myapp.urls' ASGI_APPLICATION = "myapp.routing.application" 添加了文件mayapp/routing.py from channels.routing import Pr

我遵循了通道教程,但在运行这些错误时抛出

软件包的版本为 频道==2.1.2 Django==2.0.4

我错过了什么? 在settings.py中

INSTALLED_APPS = [
   "channels"
    ....
]

ROOT_URLCONF = 'myapp.urls'
ASGI_APPLICATION = "myapp.routing.application"
添加了文件mayapp/routing.py

from channels.routing import ProtocolTypeRouter 

application = ProtocolTypeRouter({
    # Empty for now (http->django views is added by default)
})
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import myapp.routing

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            myapp.routing.websocket_urlpatterns
        )
    ),
})
from django.urls import path
from . import consumers

websocket_urlpatterns = [
    path('chatroompage', consumers.ChatConsumer),
]
这是错误日志

System check identified no issues (0 silenced).
August 01, 2018 - 13:11:42
Django version 2.0.4, using settings 'myapp.local_settings'
Starting ASGI/Channels version 2.1.2 development server at http://127.0.0.1:8080/
Quit the server with CONTROL-C.
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f71ecfb6400>
Traceback (most recent call last):
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/routing.py", line 33, in get_default_application
    module = importlib.import_module(path)
  File "/home/vkchlt0192/myapp/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'myapp.routing'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/django/utils/autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/management/commands/runserver.py", line 80, in inner_run
    application=self.get_application(options),
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/management/commands/runserver.py", line 105, in get_application
    return StaticFilesWrapper(get_default_application())
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/routing.py", line 35, in get_default_application
    raise ImproperlyConfigured("Cannot import ASGI_APPLICATION module %r" % path)
django.core.exceptions.ImproperlyConfigured: Cannot import ASGI_APPLICATION module 'myapp.routing'
系统检查未发现任何问题(0静音)。
2018年8月1日-13:11:42
Django版本2.0.4,使用设置“myapp.local_settings”
在启动ASGI/Channel 2.1.2版开发服务器http://127.0.0.1:8080/
使用CONTROL-C退出服务器。
由启动的线程中存在未处理的异常
回溯(最近一次呼叫最后一次):
文件“/home/vkchlt0192/myapp/lib/python3.5/site packages/channels/routing.py”,第33行,在get\u default\u应用程序中
模块=导入lib.import\u模块(路径)
文件“/home/vkchlt0192/myapp/lib/python3.5/importlib/_init__.py”,第126行,在导入模块中
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“”,第986行,在_gcd_import中
文件“”,第969行,在“查找”和“加载”中
文件“”,第956行,在“查找”和“加载”中解锁
ImportError:没有名为“myapp.routing”的模块
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
包装器中的文件“/home/vkchlt0192/myapp/lib/python3.5/site packages/django/utils/autoreload.py”,第225行
fn(*args,**kwargs)
文件“/home/vkchlt0192/myapp/lib/python3.5/site packages/channels/management/commands/runserver.py”,第80行,在内部运行
应用程序=自我获取应用程序(选项),
get_应用程序中的文件“/home/vkchlt0192/myapp/lib/python3.5/site packages/channels/management/commands/runserver.py”,第105行
返回StaticFilesWrapper(获取默认应用程序()
文件“/home/vkchlt0192/myapp/lib/python3.5/site packages/channels/routing.py”,第35行,在get\u default\u应用程序中
raise配置不正确(“无法导入ASGI\u应用程序模块%r”%path)
django.core.exceptions.ImpropertlyConfigured:无法导入ASGI_应用程序模块“myapp.routing”

您需要将
routing.py
文件放入
mayapp/mayapp/routing.py
而不是
mayapp/routing.py
只需更改即可

ASGI_APPLICATION=mysite.routing.APPLICATION

ASGI_APPLICATION=“routing.APPLICATION”


检查consumers.py中是否存在任何潜在错误(可能是导入错误)。 此外,尝试将频道作为settings.py中已安装的应用程序的第一项

如渠道文件所述:

Channel development server将与任何其他需要重载或替换runserver命令的第三方应用程序发生冲突。此类冲突的一个例子是来自whitenoise的whitenoise.runserver\u nostatic。为了解决这些问题,请尝试将频道移动到已安装的应用程序的顶部,或完全删除有问题的应用程序


在我的例子中,consumer.py中有未解决的包请检查您的channels.py文件中是否有未解决的包,创建另一个虚拟环境并安装较旧版本的Django,但经过2天的硬件使用后,我意识到我的consumers.py文件丢失了,而consumer's中只有一个“s”,此后我还在routing.py文件中进行了更正。可能这也可能是您的问题,请先检查所有文件名。

以防有人带来此文件。请记住:ASGI_APPLICATION=“myapp.routing.APPLICATION”应该位于settings.py的底部,以确保在生产过程中不会出现任何问题

mysite/myapp/routing.py

from channels.routing import ProtocolTypeRouter 

application = ProtocolTypeRouter({
    # Empty for now (http->django views is added by default)
})
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import myapp.routing

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            myapp.routing.websocket_urlpatterns
        )
    ),
})
from django.urls import path
from . import consumers

websocket_urlpatterns = [
    path('chatroompage', consumers.ChatConsumer),
]
myapp/routing.py

from channels.routing import ProtocolTypeRouter 

application = ProtocolTypeRouter({
    # Empty for now (http->django views is added by default)
})
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import myapp.routing

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            myapp.routing.websocket_urlpatterns
        )
    ),
})
from django.urls import path
from . import consumers

websocket_urlpatterns = [
    path('chatroompage', consumers.ChatConsumer),
]

我通过以下方式解决了我的问题:

  • python manage.py迁移
  • python manage.py makemigrations
  • python manage.py迁移

还要检查是否将routing.py文件放在了错误的目录中。应该是“myproject/routing.py”

我也面临同样的问题。
确保:
=>routing.py文件应位于项目根文件夹内(即django服务器,其中包含settings.py、wsgi.py、…)
=>在settings.py include中,ASGI_APPLICATION=“yourprojectrootname.routing.APPLICATION”

=>有时,routing.py文件中的编码可能会产生此错误,要检查是否是这种情况,请删除所有编码并输入常规模板编码

from channels.routing import ProtocolTypeRouter

application = ProtocolTypeRouter({
    # Empty for now (http->django views is added by default)
})
然后运行“python manage.py runserver”。这一次,若并没有出现任何错误,那个么问题在于routing.py中的编码。调试并修复该问题


=>在其他情况下,这可能是版本问题,降级到通道==2.1.2工作

我最近遇到了这个问题,并很快解决了它。 在检查
settings.py
routing.py
中的配置后,我发现问题出在这一行:

from channels.auth导入authmidlewarestack

问题在于版本兼容性。然后,我将
requirements.txt
升级到下面,它运行得很好

channels==2.4.0
channels-redis==2.4.2
daphne==2.5.0

在myapp/routing中导入具有绝对路径的应用程序时,请确保其导入方式如下:

导入myapp.routing

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import myapp.routing

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            myapp.routing.websocket_urlpatterns
        )
    ),
})

它可能会在PyCharm中以错误的形式向您发出警告,但您将拥有工作的Django通道。我把它当作臭虫报告给PyCharm。我希望没有其他人会像我一样花3-4个小时在上面)

你应该把
routing.py
放在
mysite/mysite/
中,而不是
mysite/
中,否则你将无法在设置文件中使用
ASGI\u APPLICATION=mysite.routing.APPLICATION
,你会得到那个错误。

<文件

你应该做的是

python manage.py shell
from mysite.routing import application
看看它到底产生了什么样的错误,并尝试修复它。这对我有帮助: 使用
ASGI_应用程序
的一切都很好(感谢前面给出的所有答案)。但我进一步阅读了日志,发现在其他地方出现了导入错误: