sanic学习踩坑记录:第一坑——sanic_jinja2应用报错ModuleNotFoundError: No module named ‘AppName‘

刚开始学习使用sanic,发现有一些坑,随手记录一下;以供后来者共同学习,避免踩坑;

# 使用的软件版本
python        3.8.10
sanic         21.9.3
sanic-jinja2  0.10.0

第一坑:sanic_jinja2应用报错

刚开始学习,跟随着https://blog.csdn.net/Mr_Gorgre/article/details/103242844 进行测试,但是运行起来一直报错;ModuleNotFoundError: No module named 'MyApp'

其中‘MyApp’是app = Sanic(name='MyApp'),自己命名的名称。

(VENV) PS E:\wim\project\pyweb\asyncWeb> & e:/wim/project/pyweb/asyncWeb/VENV/Scripts/python.exe e:/wim/project/pyweb/asyncWeb/views/sanic_web.py
Traceback (most recent call last):
  File "e:/wim/project/pyweb/asyncWeb/views/sanic_web.py", line 39, in 
    tp = sj2(app, session=session)
  File "E:\wim\project\pyweb\asyncWeb\VENV\lib\site-packages\sanic_jinja2\__init__.py", line 95, in __init__
  File "E:\wim\project\pyweb\asyncWeb\VENV\lib\site-packages\sanic_jinja2\__init__.py", line 119, in init_app
  File "d:\python\lib\site-packages\jinja2\loaders.py", line 287, in __init__
    import_module(package_name)
  File "d:\python\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "", line 1014, in _gcd_import
  File "", line 991, in _find_and_load
  File "", line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'MyApp'

根据错误提示,定位到错误点:

tp = sj2(app, session=session)

百度了一下,没有找到说明解决方案。找到的基本都是以下几种方式:

# 通常是这种模式
tp = sj2(app)

# 还有这种模式
tp = sj2(app, session=session)

# 尝试之后都不行,也尝试将
app = Sanic(name='MyApp')
# 改为
app = Sanic()
# 或者改为
app = Sanic(__name__)
# 这种模式也都不行,新版本sanic要求必须添加APP名称,不然会报错

sanic.exceptions.SanicException: Sanic instance cannot be unnamed. Please use Sanic(name='your_application_name') instead.

最后智能翻看库文件代码,找解决方案;

(class) SanicJinja2(app=None, loader=None, pkg_name=None, pkg_path=None, context_processors=None, session=None, **kwargs)

发现少了一些参数,重新增加了pkg_name参数,终于可以正常运行了。

tp = sj2(app, app.name, session=session)

百度了好久没找到这个地方,所以记录下来,跟大家分享一下。

你可能感兴趣的:(sanic,python,开发语言,后端)